Node.js 回调概念
-
回调概念
回调是函数的异步等效项。在完成给定任务时将调用回调函数。Node大量使用回调。Node的所有API均以支持回调的方式编写。例如,读取文件的功能可能会开始读取文件并将控件立即返回执行环境,以便可以执行下一条指令。文件I/O完成后,它将在传递回调函数的同时调用回调函数,文件的内容作为参数。因此,没有阻塞或等待文件I/O。这使Node.js具有高度可伸缩性,因为它可以处理大量请求,而无需等待任何函数返回结果。 -
堵塞代码示例
创建一个名为input.txt的文本文件,其内容如下:蝴蝶教程提供了自学内容 用简单的方法教编程!
使用以下代码创建一个名为main.js的js文件-var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("程序终止");
现在运行main.js以查看结果-$ node main.js
验证输出。蝴蝶教程提供了自学内容 用简单的方法教编程! 程序终止
-
非阻塞代码示例
创建一个具有以下内容的名为input.txt的文本文件。蝴蝶教程提供了自学内容 用简单的方法教编程!
更新main.js以使其具有以下代码-var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("程序终止");
现在运行main.js以查看结果-$ node main.js
验证输出。程序终止 蝴蝶教程提供了自学内容 用简单的方法教编程!
这两个示例解释了阻塞和非阻塞调用的概念。- 第一个示例显示程序阻塞,直到它读取文件,然后才继续结束程序。
- 第二个示例显示该程序不等待文件读取,而是继续打印“程序终止”,同时,该程序在不阻塞的情况下继续读取文件。
因此,阻塞程序非常顺序地执行。从编程的角度来看,更容易实现逻辑,但非阻塞程序不会按顺序执行。如果程序需要使用任何要处理的数据,则应将其保留在同一块中以使其顺序执行。