使用stream.Writable
基类的node.js 0.10,我如何处理消费者调用.end()
的情况,从而发出信号,不再有数据可用?如何处理node.js中的结束信号可写流?
在the documentationWritable
子类中实现的唯一方法是_write
,但我找不到干净的方式来注意输入已用尽。
使用stream.Writable
基类的node.js 0.10,我如何处理消费者调用.end()
的情况,从而发出信号,不再有数据可用?如何处理node.js中的结束信号可写流?
在the documentationWritable
子类中实现的唯一方法是_write
,但我找不到干净的方式来注意输入已用尽。
尴尬,为0.10,节点的stream.Writable
不支持这一个标准,清洁的方式。此问题已在此处讨论:https://github.com/joyent/node/issues/7348
在该页面中提出了几种解决方法。 TomFrost的flushwritable模块暂时看起来像是一个可接受的解决方案。
即模块提供其用于酷似stream.Writable
但支持新_flush
方法消费者调用.end()
之后被调用,但发射的finish
事件之前FlushWritable
类。
考虑你的要求
我怎么可以处理消费者的呼吁.END(),因此信号没有更多的数据将是可用的情况下?
,你应该检查,当你输入(可读流)已经结束,而不是你的输出(你写流)。所以,在这种情况下,你可以检查end
事件上的可读流,如:
readableStream.on('end', function() {
// do what you want with your writable stream, maybe call the end() method
writableStream.end();
});
你甚至可以管可读流到写流,如果你不想来管理自己的流:
readableStream.pipe(writableStream);
我正在实施一个可写入的流。其他数据流正在将数据写入我的数据库,可以使用'.pipe()'或直接使用'.write()'。在某个时间点,输入将被完全刷新,并且我的流将直接或者作为.pipe()行为的一部分接收一个'.end()'调用。我希望我的可写入流能够检测到并且例如关闭它正在写入的文件。 – Alicia 2014-12-04 01:56:38
好的,理解。因此,在这种情况下,一个选项是在您的可写入流中实现一个方法,该方法接收输入流作为参数并检查它是否已结束,然后关闭文件。 – 2014-12-04 02:04:37