zoukankan      html  css  js  c++  java
  • 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);     
    });
  • 相关阅读:
    成年人的快乐
    90后家庭的宠物
    计算机科学与技术易错知识点需记篇
    微机原理与接口编程技术2020 考试大纲知识点超细总结
    84.手写一个类的继承
    83.对前端路由的理解?前后端路由的区别
    81.$(document).ready()方法和window.onload有什么区别?
    80.浏览器是如何渲染页面的
    77、常用的拖拽事件
    75.json和jsonp的区别?
  • 原文地址:https://www.cnblogs.com/kefeiGame/p/9167584.html
Copyright © 2011-2022 走看看