nodejs 異步流程控制

先安裝:     
G:\www\nodejs\study>npm install async --g     
     
1.串行無關聯:async.series(tasks,callback);     
多個函數依次執行,之間沒有數據交換,其中一個函數出錯,後續函數再也不執行     html

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

 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);     
多個函數並行執行,最後彙總結果,若是某一個流程出錯就退出     後面的回調會失敗npm

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參數限制任務只能同時併發必定數量,而不是無限制併發,     
     async

相關文章
相關標籤/搜索