回调函数

Node.js中的回调函数免费看

什么是回调函数、阻塞代码、非阻塞代码

04-11侠课岛    基础入门       

后端/Node.js/Node.js简明入门 12     0     324

什么是回调函数

Node.js 异步编程的直接体现就是回调。异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。回调函数会在完成任务后被调用,Node 中使用了大量的回调函数,Node 中所有的 API 都支持回调函数。
那么到底什么是回调函数呢,简单来说就是一个函数可以作为一个参数在另一个函数中调用。例如下面这个例子,我们传给setTimeout函数传入了一个匿名函数和一个调用时间(毫秒):

setTimeout(function(){
    console.log('回调函数被调用');
},5000);

在浏览器中运行这段代码,5秒后会在控制台输出"回调函数被调用"。

使用回调函数可以提高 Node.js 的性能,处理大量的并发请求。回调函数一般作为函数的最后一个参数出现,语法格式如下所示:

function demo1(name, age, callback) { }
function demo2(value, callback1, callback2) { }

阻塞代码和非阻塞代码

例如我们创建一个名为 test.txt 的文件,文件中的内容如下:

侠课岛是优秀的互联网工作技能在线学习网站
阻塞代码

创建一个用于读取文件的 readfile.js 文件,然后在这个文件中编写代码:

var fs = require("fs");
var data = fs.readFileSync('test.txt');

console.log('读取内容为:\n' + data.toString());

console.log("文件读取完毕!");

启动 readfile.js 文件,输出内容如下所示:

> node readfile.js
读取内容为:
侠课岛是优秀的互联网工作技能在线学习网站
文件读取完毕!
非阻塞代码

将 readfile.js 文件中的代码修改为下面这段代码:

var fs = require("fs");
var data = fs.readFile('test.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

启动 readfile.js 文件,输出结果如下所示:

> node readfile.js
程序执行结束!
侠课岛是优秀的互联网工作技能在线学习网站

从上述两段代码的执行结果可以很明显的看到,阻塞代码中要等读取完文件才会执行接下来的代码,而非阻塞代码中不需要等待文件读取完成,就可以执行接下来的代码。而这样在读取文件时同时执行接下来的代码,可以大大提高程序的性能。

阻塞代码是按顺序执行的,而非阻塞代码不需要按顺序执行,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。

本教程图文或视频等内容版权归侠课岛所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发布或发表。

评价

12

本课评分:
  •     非常好
难易程度:
  •     适中的

内容目录


本文索引


|
教程
粉丝
主页

签到有礼

已签到2天,连续签到7天即可领取7天全站VIP

  • 1
    +2 金币
  • 2
    +3 金币
  • 3
    +5 金币
  • 6
    +7 金币
  • 5
    +6 金币
  • 4
    暖心福利
    自选分类VIP ×1天
  • 7
    惊喜大礼

    自选分类VIP ×3天 +20金币
  • 持续签到 +8 金币

金币可以用来做什么?