Nodejs学习(六)--异步流控制

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.串行有关联

需要更改的地方如下:

  1. async.waterfall
  2. async.waterfall里面不再是对象形式, 而是列表形式async.waterfall([ ])
  3. 匿名函数对应的key value不存在
  4. 上一个函数执行结果传入下一个函数作为参数
    变化之后的代码为
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

你可能感兴趣的:(Nodejs)