
上QQ阅读APP看书,第一时间看更新
2.4 回调函数
Node.js使用了大量的回调函数,其异步编程的直接体现就是回调函数。Node.js在完成任务后会调用回调函数,Node.js几乎每一个API都是支持回调函数的。
在Node应用程序中,执行异步操作的函数将回调函数作为最后一个参数,回调函数接收错误对象作为第一个参数:
function foo1(name, age, callback) { // do something } function foo2(value, callback1, callback2) { // do something }
其中,callback就是回调函数。例如,可以一边读取文件,一边执行其他命令,在文件读取完成后,将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件I/O操作,也就大大提高了Node.js的性能,可以处理大量的并发请求。
【示例2-3】让我们来看个具体的示例,创建一个test.txt文件,该文件内容如下:
Hello World!
创建main.js文件,代码如下:

以上程序中,fs.readFile()是用于读取文件的异步函数。如果在读取文件的过程中发生错误,错误err对象就会输出错误信息。如果没有发生错误,readFile跳过err对象的输出,文件内容就通过回调函数输出。执行以上代码,执行结果如下:
Done! Hello World!
接下来我们删除test.txt文件,执行结果如下:
Done! Error: ENOENT, open 'input.txt'
因为文件test.txt不存在,所以输出了错误信息。从上述示例代码可以看出,fs.readFile()方法的最后一个参数就是回调函数,而回调函数里面第一个参数就是回调函数接收的错误参数。