从零学习node.js之详解异步控制工具async(八)

2020-06-17 05:49:04易采站长站整理

串行且无关联,即执行完一个后再依次执行下一个,且相互之间无数据交互,都执行完后,再执行最后的回调函数。可以使用

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
,限制并发的数量: