以上代码已依次处理数组中的文件为例,介绍了通过递归的方式控制代码的执行流程。
应用到一些简单的场景中还是不错的,比如:我们将一个数组中的数据,依次保存到数据库中就可以采用这种方式。
通过递归的方式可以解决一些简单的异步回调问题。不过对于处理复杂的异步回调还是显得有些无能为力(如需要同步多个异步操作的结果)。
华丽点:采用 Async、Q、Promise 等第三方库处理异步回调
为了更好的处理嵌套回调的问题,可以考虑采用一些第三方专门处理异步的库,当然有能力的完全可以自己写个异步处理的辅助工具。
比较常用的处理异步的库有:async,q 还有 promise。从 npmjs.org 网站上来看,async 的火热程度最高。以前用过 async,确实也挺方便的,各种异步处理的控制流实现的也挺好。
我们将最初的同时读取两个文件的代码使用 async 处理下,示例如下:
- var async = require('async')
- , fs = require('fs');
async.parallel([
function(callback){
fs.readFile('/etc/passwd', function (err, data) {
if (err) callback(err);
callback(null, data);
});
},
function(callback){
fs.readFile('/etc/passwd2', function (err, data2) {
if (err) callback(err);
callback(null, data2);
});
}
],
function(err, results){
// 在这里处理 data 和 data2 的数据, 每个文件的内容从 results 中获取
});
来源: