随笔- 158  评论- 126  文章- 10 

NodeJs使用async让代码按顺序串行执行

描述


由于nodejs中的函数调用都是异步执行的,而笔者在工程开发中函数A需要四五个参数,而这四五个参数值都是通过函数调用获得,因此按顺序写代码时,执行到函数A时,往往函数A需要的参数值因为参数的异步调用关系,所需参数都还是undefined。

解决思路是保证函数A执行之前,函数A所需的四五个参数值都已经获得,可以通过async来实现代码的串行执行。

版本


nodejs:  6.9.5

async: 2.2.0

步骤


1、首先安装async

npm install async --save

2、写async串行化代码

笔者函数A所需的参数a,b,c,d,e都是通过函数调用获得,但是这五个函数调用都是独立的,之间不会相互影响,因此可以选择async中的 parrallel来实现,具体代码如下:

let async = require('async');
     async.parallel({
        paraA:function(done){
          let paraA = invokeA();//参数paraA通过invokeA获得
          done(null,paraA);
        },
        paraB:function(done){
          let paraB = invokeB();
          done(null,paraB);
        },
        paraC:function(done){
          let paraC = invokeC();
          done(null,paraC);
        },
        paraD:function(done){
          let paraD = invokeD();
          done(null,paraD);
        },
        paraE:function(done){
          let paraE = invokeE();
          done(null,paraE);
        }
    },function(error, result){
        func(result.paraA,result.paraB,result.paraC,result.paraD,result.paraE);//函数func需要参数paraA,paraB......
    })

使用async时,result汇总了串行阶段的所有返回值,并可以在串行代码执行完毕后使用。

注意:如果所需串行的代码相互之间形成前后依赖关系,那么可以使用async中的series,具体使用方法为将上例中的parallel改为series。

更多async使用参考:async使用

posted on 2017-11-19 17:17  上品物语  阅读(...)  评论(...编辑  收藏