我已经开始使用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]
C在A
B,D和C,E不依赖于彼此,因此可以执行它们 A完成执行后并列。
D依赖于B,应在B
另外,我需要将每个函数的数据传递给它们的相关函数。因此,A应该将结果赋予B和C.类似地,B传递给D和C传递给E。
如何使用Async模块有效地执行它们?
我认为我需要一些但不确定的东西:
async.waterfall(
A: ...,
async.parallel(
async.waterfall (
B,
D
),
async.waterfall (
C,
E
)
)
)
答案 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);
});