我已经开始使用 Node.js 作为我的后端来执行不同的操作,例如数据库查询/API 调用等。我正在阅读有关 Node.js 的文章 Async并决定试一试。它一直适用于简单的用例,在这些用例中,我想要并行或串行执行一些任务,但不知何故,我遇到了一个要求,我需要异步的串行/并行/waterfall 技术的最佳组合。
用例:
我通过回调实现了以下功能:
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方法。
Determines the best order for running the functions in tasks, based on their requirements. Each function can optionally depend on other functions being completed first, and each function is run as soon as its requirements are satisfied.
Functions also receive an object containing the results of functions which have completed so far.
例如:
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);
});
关于javascript - Node.js 异步模块的复杂用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32029038/