Nodejs教程-Node.js 回调函数

回调函数是一种异步函数的等价形式。它在每个任务完成时被调用。在 Node.js 中,回调函数通常被广泛使用。所有的 Node API 都被设计为支持回调函数。例如:当一个函数开始读取文件时,它会立即将控制权返回给执行环境,以便可以执行下一条指令。
在 Node.js 中,一旦文件 I/O 完成,它会调用回调函数。因此,没有阻塞或等待文件 I/O。这使得 Node.js 高度可扩展,可以在不等待任何函数返回结果的情况下处理大量请求。
阻塞代码示例
按照以下步骤操作:
- 创建一个名为 input.txt 的文本文件,内容如下:
Javatiku is an online platform providing self-learning tutorials on
different technologies, in a very simple language.
- 创建一个名为 main.js 的 JavaScript 文件,代码如下:
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("Program Ended");
- 在 Node.js 命令提示符中执行以下代码:
node main.js
非阻塞代码示例
按照以下步骤操作:
- 创建一个名为 input.txt 的文本文件,内容如下:
Javatiku is an online platform providing self-learning tutorials on
different technologies, in a very simple language.
- 创建一个名为 main.js 的 JavaScript 文件,代码如下:
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log("Program Ended");
- 在 Node.js 命令提示符中执行以下代码:
node main.js
从上面的两个示例可以看出,它们解释了阻塞和非阻塞调用的概念。第一个示例显示程序在读取文件之前会阻塞,然后才会继续执行并结束程序;而第二个示例中,程序在读取文件时不会等待,而是直接打印 "Program Ended",同时程序在不阻塞的情况下继续读取文件。
因此,我们可以说,阻塞程序按顺序执行,从编程角度来看,在阻塞程序中实现逻辑也更容易。但非阻塞程序不会按顺序执行,所以如果一个程序需要使用某些数据进行处理,它应该在同一个块内保持以保证顺序执行。