如何处理node.js可写流中的结束信号?

如何处理node.js可写流中的结束信号?,node.js,stream,Node.js,Stream,使用node.js 0.10的stream.Writable基类,如何处理消费者调用.end()从而发出不再有可用数据的信号的情况 在可写子类中,唯一被告知要实现的方法是\u write,但考虑到您的要求,我找不到任何明确的方法来注意输入何时耗尽。 我如何处理消费者调用.end()并因此发出不再有可用数据的信号的情况 ,您应该检查输入(可读流)何时结束,而不是输出(可写流)何时结束。因此,在本例中,您可以检查可读流上的end事件,如: readableStream.on('end', funct

使用node.js 0.10的
stream.Writable
基类,如何处理消费者调用
.end()
从而发出不再有可用数据的信号的情况


可写
子类中,唯一被告知要实现的方法是
\u write
,但考虑到您的要求,我找不到任何明确的方法来注意输入何时耗尽。

我如何处理消费者调用.end()并因此发出不再有可用数据的信号的情况

,您应该检查输入(可读流)何时结束,而不是输出(可写流)何时结束。因此,在本例中,您可以检查可读流上的
end
事件,如:

readableStream.on('end', function () {
  // do what you want with your writable stream, maybe call the end() method
  writableStream.end();
});
如果您不想自己管理流,甚至可以将可读流通过管道传输到可写流:

readableStream.pipe(writableStream);

令人尴尬的是,从0.10开始,节点的
stream.Writable
不以标准、干净的方式支持这一点。这里已经讨论了这个问题:

在那一页中,提出了几种解决办法。TomFrost的模块目前看起来是一个可接受的解决方案


该模块提供了一个
FlushWritable
类,该类的使用方式与
stream.writeable
完全相同,但支持一个新的
\u flush
方法,该方法在消费者调用
.end()
之后,但在发出
finish
事件之前调用

调用
end()
方法,并且所有数据都已刷新到基础系统时,将发出此事件


我还没有测试过它,但按照我的阅读方式,所有对
\u write
的调用都必须在发出
finish
事件之前完成。

我知道这很旧,但我在2020年遇到了它。如果其他人在这里找到了方法:这现在是在
可写中实现的。_final()
如文档所示

我正在实现一个可写流。另一个流正在使用
.pipe()
或直接使用
.write()
将数据写入矿山。在某个时间点,输入将被完全刷新,我的流将收到一个
.end()
调用(直接调用,或作为
.pipe()
行为的一部分)。我希望我的可写流检测到这一点,例如,关闭它正在写入的文件。好的,明白。因此,在本例中,一个选项是在可写流中实现一个方法,该方法将输入流作为参数接收,并检查其是否已结束,然后关闭该文件。