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

Node.js 如何等待所有节点流完成/结束?,node.js,asynchronous,node.js-stream,Node.js,Asynchronous,Node.js Stream,我有一个子节点进程,每24小时在CRON上运行一次。当流程开始时,它读取一些排队的数据,并将这些数据推送到某个转换流中。然后,该流充当反向多路复用器,并将该流拆分为多个流,这些流最终解析,但它们都是异步的 一旦所有这些流都完成,我需要终止我创建的这个子进程。我的问题是,你怎么知道所有的溪流何时结束 尝试: 我曾尝试使用EventEmitter的“finish”事件,但似乎在第一个反向多路复用流完成时捕捉到了这一点(这是一个很好的例子:) 基于承诺的方法。所以这种方法是有效的,但我认为有一种更简单

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

一旦所有这些流都完成,我需要终止我创建的这个子进程。我的问题是,你怎么知道所有的溪流何时结束

尝试:
  • 我曾尝试使用EventEmitter的“finish”事件,但似乎在第一个反向多路复用流完成时捕捉到了这一点(这是一个很好的例子:)

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


  • 我会重新考虑你的第二个选择。考虑下面的代码来方便地将列表映射为承诺:

    const promises=data.map((项)=>functionthatturnspromise(项))

    构建承诺后,Promise.all是执行多个承诺并返回所有结果的一种方法

    Promise.all(承诺)
    
    .然后(结果数组=>doStuff)

    我建议查看可观察的对象。或者应该这样做。我用
    ramda-future
    parallel-future
    模块运行和解决了多个子进程的类似问题,这种方法非常简单。它类似于promise,但由于子进程的运行任务/流在本质上更具功能性,我更喜欢这种更干净、更精简的方法。