nodejs 异步流程控制

先安装:     
G:\www\nodejs\study>npm install async --g     
     
1.串行无关联:async.series(tasks,callback);     
多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行     

//-------------nj_async.js------------------------------    

 var async = require('async');   
function exec(){  
    async.series({   
        one: function(done){  
            ii=0;  
            setInterval(function(){  
                console.log('aaa='+new Date());  
                ii++;  
                if(ii==3){  
                    clearInterval(this);  
                    done(null,{one:"one"});  
                }  
            },1000);  
        },  
        two: function(done){  
            jj=0;  
            setInterval(function(){  
                console.log('bbb='+new Date());  
                jj++;  
                if(jj>3){  
                    clearInterval(this);  
                    done(null,{two:"two"});  
                }  
            },1000);  
        }  
    },  
        function(err,rs) {   
            console.log(err);  
            console.log(rs);  
        });  
}  
exec();     

  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      瀑布流
每一步执行时需要由上一步执行的结果当做参数.所以每一步必须串行等待     

 var async = require('async'); 
function exec(){ 
    async.waterfall( 
        [ 
            function(done){ 
                ii=0; 
                setInterval(function(){ 
                    console.log("aaa="+new Date()); 
                    ii++; 
                    if(ii==3){ 
                        clearInterval(this); 
                        done(null,'one完毕'); 
                    } 
                },1000); 
            }, 
            function(preValue,done){ //上一函数的值
                jj=0; 
                setInterval(function(){ 
                    console.log(preValue+"="+new Date()); 
                    jj++; 
                    if(jj==3){ 
                        clearInterval(this); 
                        done(null,preValue+',two完毕'); 
                    } 
                },1000); 
                 
            } 
        ],function(err,rs){ 
            console.log(err); 
            console.log(rs); 
        }     
    ) 
} 

  4.parallelLimit(tasks, limit, [callback])     
     
parallelLimit函数和parallel类似,但是它多了一个参数limit。     
limit参数限制任务只能同时并发一定数量,而不是无限制并发,     
     

转载于:https://www.cnblogs.com/yin-dt/p/8076164.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值