如何处理node.js可写流中的结束信号?
使用node.js 0.10的如何处理node.js可写流中的结束信号?,node.js,stream,Node.js,Stream,使用node.js 0.10的stream.Writable基类,如何处理消费者调用.end()从而发出不再有可用数据的信号的情况 在可写子类中,唯一被告知要实现的方法是\u write,但考虑到您的要求,我找不到任何明确的方法来注意输入何时耗尽。 我如何处理消费者调用.end()并因此发出不再有可用数据的信号的情况 ,您应该检查输入(可读流)何时结束,而不是输出(可写流)何时结束。因此,在本例中,您可以检查可读流上的end事件,如: readableStream.on('end', funct
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()
行为的一部分)。我希望我的可写流检测到这一点,例如,关闭它正在写入的文件。好的,明白。因此,在本例中,一个选项是在可写流中实现一个方法,该方法将输入流作为参数接收,并检查其是否已结束,然后关闭该文件。