2014-12-04 46 views

回答

0

尴尬,为0.10,节点的stream.Writable不支持这一个标准,清洁的方式。此问题已在此处讨论:https://github.com/joyent/node/issues/7348

在该页面中提出了几种解决方法。 TomFrost的flushwritable模块暂时看起来像是一个可接受的解决方案。

即模块提供其用于酷似stream.Writable但支持新_flush方法消费者调用.end()之后被调用,但发射的finish事件之前FlushWritable类。

-1

考虑你的要求

我怎么可以处理消费者的呼吁.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

我正在实施一个可写入的流。其他数据流正在将数据写入我的数据库,可以使用'.pipe()'或直接使用'.write()'。在某个时间点,输入将被完全刷新,并且我的流将直接或者作为.pipe()行为的一部分接收一个'.end()'调用。我希望我的可写入流能够检测到并且例如关闭它正在写入的文件。 – Alicia 2014-12-04 01:56:38

+0

好的,理解。因此,在这种情况下,一个选项是在您的可写入流中实现一个方法,该方法接收输入流作为参数并检查它是否已结束,然后关闭文件。 – 2014-12-04 02:04:37

2

我发现的答案是听finish事件。

end()方法已被调用,并且所有数据已被刷新到底层系统时,将发出此事件。

我没有测试过,但我读这个方式,发出的finish事件之前_write所有调用必须完成。