串行且无关联,即执行完一个后再依次执行下一个,且相互之间无数据交互,都执行完后,再执行最后的回调函数。可以使用
async.series串行且有关联,即执行完一个后再依次执行下一个,且上一个回调函数的结果会作为下一个回调函数的参数。可以使用async.waterfall
并行,这几个回调函数同时并发执行,都执行完成后,再执行最后的回调函数。可以使用
async.parallel当然还有其他更复杂的流程,这里也只聊上面的三种情况。
async.series,async.waterfall和async.parallel的语法都是一样的:
async.Method(coll, function(err, results){})
其中coll既可以是数组,也可以是json格式的,而且results的类型与coll对应。
串行且无关联
async.series:
// 串行且无关联,数组格式
async.series([
function(cb){
getAllList(function(result){
cb(null, result);
});
},
function(cb){
getAllUser(function(result){
cb(null, result);
});
}
], function(err, result){
console.log(result);
})同时串行的异步可以是json格式的:
// 串行且无关联,json个数
async.series({
one: function(cb){
getAllList(function(result){
cb(null, result);
});
},
two: function(cb){
getAllUser(function(result){
cb(null, result);
});
}
}, function(err, result){
console.log(result);
})串行且有关联
async.waterfall:
// 串行且上一个结果作为下一个的参数
async.waterfall([
function(cb){
getListById(1, function(result){
cb(null, result);
});
},
function(params, cb){
console.log(params);
getAllUser(function(result){
cb(null, result);
});
}
], function(err, result){
console.log(result);
})并行
async.parallel:
// 并行,getAllList与getAllUser同时执行
async.parallel([
function(cb){
getAllList(function(result){
cb(null, result);
});
},
function(cb){
getAllUser(function(result){
cb(null, result);
});
}
], function(err, result){
console.log(result);
})关于并行的异步操作,这里还有一个
async.parallelLimit,限制并发的数量:









