Node.js异步回调:非阻塞调用简单实例

JavaScript是单线程运行的,但可以创建回调函数平行线程与主线程并行运行实现异步编程。

1
2
3
4
5
setTimeout(function () {
console.log('Async');
}, 500);
console.log('Hello');

输出结果可以看到后续打印代码先于回调代码执行。

但即使平行线程执行完毕了通知主线程进行回调时,回调函数也需等到主线程空闲时才可执行。

同样的, Node.js依赖回调函数实现异步I/O,所有API都支持回调函数,通过非阻塞调用异步来实现处理高并发请求
新建文件fsAsyncTest.txt,写入Hello Async并保存。
创建实例fsReadTest.js代码如下

1
2
3
4
5
6
7
var fs = require('fs');
fs.readFile('fsAsyncTest.txt',function(err,data){
if (err) return console.error(err);
console.log(data.toString());
});
console.log('Finish Read');

输出结果同样可以看到后续打印先于回调代码执行。

异步通过回调函数实现了在读取文件时同时执行后续代码,无需等待文件读取完再执行后续代码,非阻塞调用提高了性能。

参考资料:阿里巴巴Node.js文档