Node.js异步模块

时间:2015-08-15 20:27:04

标签: javascript node.js asynchronous async.js

我已经开始使用Node.js作为我的后端来执行不同的操作,如数据库查询/ API调用等。我正在阅读有关Node.js Async并决定尝试一下。它一直在用于简单的用例,我想要并行或串行的某些任务,但不知怎的,我已经满足了需要Async的串/并/瀑布技术的最佳组合的要求。

用例:

我使用回调实现了以下功能:

function A(input, callback) {
...
callback(err,result);
}


function B(input1, input2, callback) {
...
callback(err,result);
}


function C(input, callback) {
...
callback(err,result);
}


function D(input, callback) {
...
callback(err,result);
}


function E(input, callback) {
...
callback(err,result);
}

他们的执行顺序应该是:

A - > [B - >; d]
A - > [C - > E]

  • B,D,C,E在A.
  • 之后执行
  • D在B
  • 之后执行
  • E在C
  • 之后执行
  • B在A
  • 之后执行
  • C在A

  • 之后执行
  • B,D和C,E不依赖于彼此,因此可以执行它们 A完成执行后并列。

  • D依赖于B,应在B

  • 之后执行
  • E依赖于C,应在C之后执行。

另外,我需要将每个函数的数据传递给它们的相关函数。因此,A应该将结果赋予B和C.类似地,B传递给D和C传递给E。

如何使用Async模块有效地执行它们?

我认为我需要一些但不确定的东西:

async.waterfall(    
  A: ...,    
  async.parallel(
      async.waterfall (
          B,
          D
      ),
      async.waterfall (
          C,
          E
      )
   )
) 

1 个答案:

答案 0 :(得分:4)

尝试使用auto方法。

  

根据需求确定在任务中运行函数的最佳顺序。每个函数可以选择性地依赖于首先完成的其他函数,并且每个函数在满足其要求时立即运行。

     

函数还会收到一个对象,其中包含到目前为止已完成的函数的结果。

例如:

async.auto({
  A: function (callback) {
    callback(null, 'A data');
  },
  B: ['A', function (results, callback) {
    // do something with results.A;
    callback(null, 'B data');
  }],
  C: ['A', function (results, callback) {
    // do something with results.A;
    callback(null, 'C data');
  }],
  D: ['A', 'B', function (results, callback) {
    // do something with results.A and results.B;
    callback(null, 'D data');
  }],
  E: ['A', 'C', function (results, callback) {
    // do something with results.A and results.C;
    callback(null, 'E data');
  }]
}, function (err, results) {
  console.log('err = ', err);
});