Node.js 异步模块的复杂用例

2023-12-02

我已经开始使用 Node.js 作为后端来执行不同的操作,例如数据库查询/ API 调用等。我正在阅读有关 Node.js 的内容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.waterfall(    
  A: ...,    
  async.parallel(
      async.waterfall (
          B,
          D
      ),
      async.waterfall (
          C,
          E
      )
   )
) 

尝试使用auto method.

根据任务的要求确定运行任务中功能的最佳顺序。每个功能可以选择依赖于其他功能首先完成,并且每个功能在其要求得到满足后立即运行。

函数还接收一个对象,其中包含迄今为止已完成的函数的结果。

例如:

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);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js 异步模块的复杂用例 的相关文章

随机推荐