Open
Description
之前的老文章,换了个地方写博客,,所以得重新发布下~~
Control Flow
async是Nodejs中非常常用的一个工具模块,其中方法有很多,主要分3大类(集合,流程控制,工具),下面就简单说说 流程控制 的一些常用方法
series(tasks, [callback])
它的作用就是按照顺序依次执行。
async.series({
one: function(callback){
callback(null, 1);
},
two: function(callback){
callback(null, 2);
}
},function(err, results) {
console.log(results);
});
输出 { one: 1, two: 2 }
async.series([
function(callback){
callback(null, 1);
},
function(callback){
callback(null, 2);
}
],function(err, results) {
console.log(results);
});
输出 [ 1, 2 ]
上面写出两个,是因为series方法的第一个参数可以是一个数组也可以是一个对象,参数类型不同,callback 参数返回的值也不同。
waterfall(tasks, [callback])
waterfall和series函数有很多相似之处,都是按照顺序执行。
不同之处是waterfall每个函数产生的值,都将传给下一个函数,而series则没有这个功能,示例如下:
async.waterfall([
function(callback){
callback(null, 'one', 'two');
},
function(arg1, arg2, callback){
// arg1 now equals 'one' and arg2 now equals 'two'
callback(null, 'three');
},
function(arg1, callback){
// arg1 now equals 'three'
callback(null, 'done');
}
], function (err, result) {
// result now equals 'done'
console.log(result);
});
另外需要注意的是 waterfall 的 tasks 参数只能是 数组 类型。
parallel(tasks, [callback])
parallel函数是并行执行多个函数,每个函数都是立即执行,不需要等待其它函数先执行。
传给最终callback的数组中的数据按照tasks中声明的顺序,而不是执行完成的顺序,示例如下:
async.parallel([
function(callback){
callback(null, 'one');
},
function(callback){
callback(null, 'two');
}
],function(err, results){
console.log(results); // [ 'one', 'two' ]
});
和series函数一样,tasks参数可以是一个 数组 或 对象,tasks参数类型不同,返回的results格式也会不一样。
parallelLimit(tasks, limit, [callback])
parallelLimit函数和parallel类似,但是它多了一个参数limit。
limit参数限制任务只能同时并发一定数量,而不是无限制并发,示例如下:
async.parallelLimit([
function(callback){
callback(null, 'one');
},
function(callback){
callback(null, 'two');
}
],2,function(err, results){
console.log(results); // [ 'one', 'two' ]
});
以上是一些我个人比较常用的方法,还有一些其他不怎么常用的方法,建议去github看更多详细信息,不过是英文的哦~