【发布时间】:2015-11-08 19:55:02
【问题描述】:
我已经开始使用 Node.js 作为我的后端来执行不同的操作,比如 DB 查询/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 模块有效地执行它们?
我想我需要类似但不确定的东西:
async.waterfall(
A: ...,
async.parallel(
async.waterfall (
B,
D
),
async.waterfall (
C,
E
)
)
)
【问题讨论】:
-
为什么不切换到基于标准的实现 -> ES6 Promises?
-
您好。我们试图鼓励尽可能简洁的问题。因此,如果您习惯在问题中加上“谢谢”、“请帮帮我”等,那么值得知道这些通常被认为是噪音,并且经常被删掉。
-
@halfer:我会在以后的帖子中记住这一点。
标签: javascript node.js asynchronous async.js