1.串行无关联
2.并行无关联
3.串行有关联
4.paralleLimit:与paralle相似, 但是多了一个limit,
limit参数限制任务只能同时并发一定的数量, 而不是无限制的并发
1.串行无关联
var async = require('async')
function oneFun() {
var ii=0;
setInterval(function() {
console.log('aaaaaa' + new Date());
ii++;
if (ii == 3){
clearInterval(this);
}
}, 1000)
console.log('oneFun')
}
function twoFun() {
console.log('twoFun')
}
function exec() {
async.series(
{
one:function(done) {
var ii=0;
setInterval(function() {
console.log('aaaaaa' + new Date());
ii++;
if (ii == 3){
clearInterval(this);
done(null,'one completed');
}
}, 1000)
},
two:function(done) {
var jj=0;
setInterval(function() {
console.log('bbbbbb' + new Date());
jj++;
if (jj == 3){
clearInterval(this);
done(null,'two completed');
}
}, 1000)
}
},function(err,rs){
console.log(err);
console.log(rs);
}
)
}
exec();
console.log('main thread ok')
运行结果为:
main thread ok
aaaaaaSun Oct 15 2017 22:09:10 GMT+0800 (中国标准时间)
aaaaaaSun Oct 15 2017 22:09:11 GMT+0800 (中国标准时间)
aaaaaaSun Oct 15 2017 22:09:12 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:09:13 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:09:14 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:09:15 GMT+0800 (中国标准时间)
null
{ one: 'one completed', two: 'two completed' }
2.并行无关联
只需将async.series
更改为async.parallel
其他不变。运行结果为:
main thread ok
aaaaaaSun Oct 15 2017 22:08:54 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:08:54 GMT+0800 (中国标准时间)
aaaaaaSun Oct 15 2017 22:08:55 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:08:55 GMT+0800 (中国标准时间)
aaaaaaSun Oct 15 2017 22:08:56 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:08:56 GMT+0800 (中国标准时间)
null
{ one: 'one completed', two: 'two completed' }
3.串行有关联
需要更改的地方如下:
- async.waterfall
- async.waterfall里面不再是对象形式, 而是列表形式
async.waterfall([ ])
- 匿名函数对应的key value不存在
- 上一个函数执行结果传入下一个函数作为参数
变化之后的代码为
function exec() {
async.waterfall(
[
function(done) {
var ii=0;
setInterval(function() {
console.log('aaaaaa' + new Date());
ii++;
if (ii == 3){
clearInterval(this);
done(null,'one completed');
}
}, 1000)
},
function(prevalue,done) {
var jj=0;
setInterval(function() {
console.log('bbbbbb' + new Date());
jj++;
if (jj == 3){
clearInterval(this);
done(null,prevalue + ' two completed');
}
}, 1000)
}
],function(err,rs){
console.log(err);
console.log(rs);
}
)
}
运行结果为
main thread ok
aaaaaaSun Oct 15 2017 22:17:47 GMT+0800 (中国标准时间)
aaaaaaSun Oct 15 2017 22:17:48 GMT+0800 (中国标准时间)
aaaaaaSun Oct 15 2017 22:17:49 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:17:50 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:17:51 GMT+0800 (中国标准时间)
bbbbbbSun Oct 15 2017 22:17:52 GMT+0800 (中国标准时间)
null
one completed two completed