async异步流程控制
http://cnodejs.org/topic/54acfbb5ce87bace2444cbfb
先安装:
G:\www\nodejs\one\models>npm install async --save-dev
1.串行无关联:async.series(tasks,callback);
多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行
//匿名函数前必须有键名(one:,two:)
async.series({
one: function(callback){
callback(null, 1);
},
two: function(callback){
callback(null, 2);
}
},function(err, results) {
console.log(results);
});
2.并行无关联:async.parallel(tasks,callback);
多个函数并行执行,最后汇总结果,如果某一个流程出错就退出
async.parallel({
one: function(callback){
callback(null, 1);
},
two: function(callback){
callback(null, 2);
}
},function(err, results) {
console.log(results);
});
3.串行有关联:waterfall
每一步执行时需要由上一步执行的结果当做参数.所以每一步必须串行等待
async.waterfall([
function (done) {
done(null, 'one');
},
function (onearg, done) {
done(null, onearg + '| two');
},
function (twoarg, done) {
done(null, twoarg + '| three');
},
function (threearg, done) {
done(null, threearg + '| four');
}
], function (error, result) {
console.log(result);
console.timeEnd('waterfall');
})
4.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);
});
//----------------另一种方式是用Promise
http://www.jdon.com/idea/nodejs/promise.html