回调形式的流程控制 async库的使用
发布于 9 年前 作者 blackjack 6405 次预览 最后一次回复是 9 年前 来自 分享
一个关于node流程控制的问题,喜欢写回调模式的可以看过来 async包括 顺序执行(series),瀑布流执行(waterfall),并行执行(parallel)(parallelLimit)这几个应该是常用的 直接上代码了,本人用的是async库
var async = require('async');
async.series([
function(cb){
setTimeout(function(){
cb(null, 1);
}, 1000);
},
function(cb){
setTimeout(function(){
cb(null, 2);
}, 1000);
}
], function(error, result){
if(error){
console.log(error);return;
}
console.log('parallel:消耗时间为数组的每个方法执行时间的总合, result的结果为每个方法的返回结果,和数组顺序对应');
console.log('parallel:',result);
});
/*并行执行*/
async.parallel([
function(cb){
setTimeout(function(){
cb(null, 1);
}, 1000);
},
function(cb){
setTimeout(function(){
var c = 1 + 100;
cb(null, c);
}, 1000);
}
], function(error, result){
if(error){
console.log(error);return;
}
console.log('parallel:消耗时间为数组中的执行最长的一个方法, result的结果为每个方法的返回结果,和数组顺序对应');
console.log('parallel:', result);
});
/*paramllelLimit参数是三个,第二个则为限制并行的数量*/
async.parallelLimit([
function(cb){
setTimeout(function(){
cb(null, 1);
}, 1000);
},
function(cb){
setTimeout(function(){
var c = 1 + 100;
cb(null, c);
}, 1000);
}
], 1, function(error, result){
if(error){
console.log(error);return;
}
console.log('parallelLimit:消耗时间为数组中的执行最长的一个方法, result的结果为每个方法的返回结果,和数组顺序对应');
console.log('parallelLimit:', result);
});
11 回复
promise之前async是首选,个人也挺喜欢这个库
就这个例子,怎么用async或promise?
@gzhangzy
要实现那句 goto doSomeThing 的逻辑,怎么办呀?
@gzhangzy
这样也可以吧
问的是 那两个goto逻辑 怎么实现?
promise大法好,generator大法好
可以运行验证,大法也就那么回事。
运行结果
@gzhangzy 用Promise写的:
输出:
写的不错!
@gzhangzy 多谢多谢,个人爱好写回调