回调函数

收藏847

阅读7465

更新时间2025-08-28

Node.js回调函数:异步性是Node.js变得流行的基本因素之一。回调是函数异步的实现。一般来说,在 Node.js 中,大多数处理资源的函数都有回调变体。

当为某个任务调用某个异步函数的资源时,将立即让该控件继续执行该函数后面的后续语句。资源上的任务将并行启动。这可以帮助 Node.js 继续执行其他任务,而同时该函数正在使用该资源。一旦使用资源的任务完成,Node.js 将使用回调函数恢复。调用 Callback 函数时带有参数: 数据对象、结果对象和(或)包含任务相关信息的错误对象。

阻塞函数:与异步函数相反,同步函数将执行块,直到资源完成时才完成。 因此,同步函数也称为阻塞函数。

Node.js嵌套的回调函数 :如果对资源依次执行多个操作,并且还必须异步进行,则可以将回调函数彼此嵌套。

现在,在读取(任务)文件(资源)时,我们将看到回调函数与阻塞函数相比的三种情况。

  • Node.js阻塞函数示例

  • Node.js回调函数示例

  • Node.js嵌套回调函数示例

阻塞函数示例

以下是一个示例节点脚本,该脚本同步读取sample.txt文件。

 var fs = require('fs'); 
 
// 读取文件sample.txt
var data = fs.readFileSync('sample.txt'); 
console.log("Reading file completed : " + new Date().toISOString()); 
 
console.log("After readFileSync statement : " + new Date().toISOString());

当上述程序运行时

终端输出

 arjun@arjun-VPCEH26EN:~/nodejs$ node read-file-sync.js 
Reading file completed : 2017-10-19T12:21:40.103Z
After readFileSync statement : 2017-10-19T12:21:40.105Z

after readFileSync 语句总是在完成读取文件后才执行。 fs.readFileSync 阻塞了执行流。

Node.js回调函数示例

以下是示例节点脚本,该示例脚本借助Node.js回调函数异步读取sample.txt文件。

 var fs = require('fs'); 
 
// 读取文件sample.txt
fs.readFile('sample.txt', 
    // 读取文件完成时调用的回调函数
    function(err, data) {  
        if (err) throw err; 
        // 数据是包含文件内容的缓冲区
        console.log("Reading file completed : " + new Date().toISOString()); 
 }); 
 
console.log("After readFile asynchronously : " + new Date().toISOString());

当上述程序运行时

终端输出

arjun@arjun-VPCEH26EN:~/nodejs$ node read-file-async.js 
After readFile asynchronously : 2017-10-19T12:25:36.982Z
Reading file completed : 2017-10-19T12:25:36.987Z

您可能会注意到,即使在执行 console.log  在 readFile 异步语句之后,完成对文件的读取也需要大约5毫秒。file. fs.readFile('sample.txt', callback function{..}) 没有阻塞执行,而是与主控制流并行启动一个新进程,以读取文件(对资源执行任务)。

Node.js嵌套回调函数示例

为了演示Node.js嵌套回调函数,我们将考虑重命名文件然后使用异步函数将其删除的方案。

 var fs = require('fs'); 
 
fs.rename('sample.txt', 'sample_old.txt', 
    // 第一回叫功能
    function (err) { 
        if (err) throw err; 
        console.log('File Renamed.'); 
        fs.unlink('sample_old.txt', 
            // 第二次回叫功能
            function (err) { 
                if (err) throw err; 
                console.log('File Deleted.'); 
            } 
        );  
    } 
 );

当上述Node.js示例与node一起运行时

终端输出

 arjun@arjun-VPCEH26EN:~/nodejs$ node nodejs-nested-callback.js 
File Renamed. 
File Deleted.

结论:

在本Node.js教程– Node.js回调函数中,我们学习了回调函数的执行流程以及它们如何实现非阻塞,以及如何将嵌套回调函数与示例结合使用。

相关

视频

RELATED VIDEOS

更多

免费

Web前端开发极速入门
初级 Web前端开发极速入门

219920次学习

收藏

免费

前端入门_HTML5
初级 前端入门_HTML5

616946次学习

收藏

免费

30分钟学会网站布局
初级 30分钟学会网站布局

238440次学习

收藏

免费

CSS视频教程-玉女心经版
初级 CSS视频教程-玉女心经版

393054次学习

收藏

免费

独孤九贱(1)_HTML5视频教程

免费

独孤九贱(6)_jQuery视频教程

免费

独孤九贱(7)_Bootstrap视频教程

免费

独孤九贱(2)_CSS视频教程
初级 独孤九贱(2)_CSS视频教程

229605次学习

收藏

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

71万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号