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

我有一个每24小时运行一次CRON的子节点进程。 当进程开始时,它会读取一些排队数据,并将该数据推送到某个转换stream。 这个stream然后作为一个逆多路复用器,并将stream分成多个stream,最终解决,但他们都是asynchronous的。

我需要终止所有这些stream完成后创build的subprocess。 我的问题是,你怎么知道什么时候所有的stream都完成了?

尝试:

  1. 我试图使用EventEmitter的“完成”事件,但似乎在第一个反向多路复用stream结束(这是一口:) :)时被捕获。

  2. 基于承诺的方法。 所以这种方法是有效的,但我认为有一个更简单的方法来做这样的事情。 基本上,这导致为每个反向复用stream水线创build一个承诺,当每个stream水线完成时,我们解决了这个承诺。 然后,当所有的承诺都已经解决了,一个事件被触发,我们在其他地方捕获这个事件来终止这个过程。

我会重温你的第二个select。 考虑下面的代码来轻松地将您的列表映射到承诺:

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

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

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