Node.js中流程控制

Posted KefeiGame

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js中流程控制相关的知识,希望对你有一定的参考价值。

Node.js中的流程控制可以使用async,在使用之前需要先安装,使用npm安装

npm install async --g

下面主要介绍4种流程控制的方式:

1、串行无关联:async.series(tasks,callback)

多个函数依次执行,之间没有数据交换,其中一个函数出错,后续函数不再执行;

以下是标准写法:

async.series({     
    one: function(callback){     
        callback(null, 1);     
    },     
    two: function(callback){     
        callback(null, 2);     
    }     
},function(err, results) {     
    console.log(results);     
});   

为了测试,我们使用交叉执行的方式:

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

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);     
});

 





以上是关于Node.js中流程控制的主要内容,如果未能解决你的问题,请参考以下文章

Java中流程控制语句

Node.js 中流操作实践

sql 中流程控制语句的关键字都有哪些

node.js中文件读取方式中流方式

Node.js JavaScript 片段中的跳过代码

澄清 node.js + promises 片段