如何等待所有节点流完成/结束?

时间:2016-03-02 20:02:09

标签: node.js asynchronous node.js-stream

我有一个子节点进程,每24小时在CRON上运行一次。当进程开始时,它会读取一些排队的数据并将数据推送到某些转换流中。然后,该流充当反向多路复用器,并将流分成多个流,最终解析但它们都是异步的。

我需要在所有这些流完成后终止我创建的子进程。我的问题是,你怎么知道所有的流都已经完成了?

尝试:

  1. 我试图使用EventEmitter'完成'事件,但似乎是在第一个反向多路复用流完成时捕获(这是一口:))。

  2. 基于承诺的方法。所以这种方法有效,但我认为有一种更简单的方法来做这样的事情。基本上,这导致为每个反向多路复用管道创建承诺,并且当每个管道完成时我们解决该承诺。然后,当所有承诺都已解决时,会触发一个事件,我们会在其他地方捕获该事件以终止该过程。

1 个答案:

答案 0 :(得分:0)

我会重温你的第二个选择。请考虑以下代码,以便轻松地将列表映射到承诺:

const promises = data.map((item) => functionThatReturnsPromise(item));

构造promises之后,Promise.all是一种执行多个promise并返回所有结果的方法。

Promise.all(promises) .then(array_of_results => doStuff)