在 Node.js 中,回调函数是一种常见的异步编程模式。它允许你在某个操作完成时执行额外的代码,而不必等待该操作完成。这种模式使得 Node.js 可以非阻塞地处理 I/O 操作,如文件读写、网络请求等,从而提高性能和吞吐量。
原理
Node.js 事件循环和异步 I/O 模型使得回调函数成为可能。当一个 I/O 操作(如读取文件)被发起时,Node.js 不会阻塞主线程,而是将请求发送到操作系统。然后,主线程继续执行后续代码。当操作系统完成 I/O 操作时,它会将结果传递回 Node.js,并通过事件循环调用相应的回调函数。
使用
回调函数通常作为其他函数的最后一个参数传递,并在异步操作完成时被调用。回调函数可以带有参数,这些参数通常包含操作的结果或错误信息。
代码示例
以下是使用回调函数读取文件内容的例子:
const fs = require('fs');
// 异步读取文件
function readFileAsync(filename, callback) {
fs.readFile(filename, 'utf8', callback);
}
// 回调函数,当文件读取完成时被调用
function fileReadCallback(err, data) {
if (err) {
console.error('Error reading file:', err);
return;
}
console.log('File content:', data);
}
// 使用 readFileAsync 函数读取文件,并提供回调函数
readFileAsync('example.txt', fileReadCallback);
在这个例子中,readFileAsync
函数接受一个文件名和一个回调函数。当文件读取操作完成时,回调函数 fileReadCallback
被调用,接收两个参数:err
(如果有错误)和 data
(文件内容)。