https://www.npmjs.com/package/async
PART 1
http://yijiebuyi.com/blog/be234394cd350de16479c583f6f6bcb6.html
本篇算是async库的速查手册吧,详细学习参考一下上面贴的链接
这个是aearly写的async库,和ES6自带的async不是一个东西
串行 无关联 async.series
函数依次执行,后面不需要调前面步骤的结果
async.series(
{
func1: function(done){
//done(err, 参数): 将参数写入results.func1
done(err, 数据1) //results.func1 = 数据1
done(err, 数据1, 数据2) //表现为数组,results.func1 = [数据1, 数据2]
},
func2: function(done){
done(err, 参数)
},
},
function(error, results){
//results.func1, results.func2...
}
});
串行 有关联 async.waterfall
函数依次执行,后面需要调前面步骤的结果
async.waterfall(
[
function(done){
done(err, 结果) //将结果写入result
},
function(result, done){
//result即上一步写入的结果
done(err, 返回结果)
},
],
function(error, result){});
并行 async.parallel
某步出错不影响其他步骤执行,最后结果中的error是第一个出现的error
async.parallel(
{
func1: function(done){
done(err, results)
},
func2: function(done){
done(err, results)
},
}, function(error, results){});
自动 async.auto
和series格式一样,根据依赖关系自动控制串行、并行
2.0版本前回调里的参数是(done, results),2.0及之后的版本统一把done作为最后一个参数,即(results, done)
async.auto(
{
func1: function(done){
done(err, 要写入func1的结果)
},
func2: ["func1", function(results, done){ //依赖func1
//results = {func1: xxx};
done(err, 返回结果)
}],
func3: ["func2", function(results, done){
}]
}, function(error, results){
results = {func1: xxx, func2: xxx, func3: xxx};
}
});
PART2
http://stackoverflow.com/questions/10390041/node-js-using-the-async-lib-async-foreach-with-object#
异步for循环 async.forEach
async.forEach(list, function(item, done)
{
//操作item
done(); //通知for本循环完成
}, function(err){
//for之后执行的函数
});
async.forEachOf
async.forEachOf(obj, function (value, key, callback) {})
//用法和上面forEach一样,只是参数多了一个参数,表示被遍历value的index