Node流中的结束事件和结束事件有什么区别


Answers:


132

end并且finish是在不同类型的流上的相同事件,但

  • stream.Readableend永远不会触发finish
  • stream.Writablefinish永远不会触发end

来源:https : //nodejs.org/dist/latest-v5.x/docs/api/stream.html

为什么同一事件的命名不同?

我能想到的唯一原因是因为双工流(stream.Duplex)可以实现stream.Readablestream.Writable接口(https://nodejs.org/dist/latest-v5.x/docs/api/stream.html#stream_class_stream_duplex)同时可写流。要区分流上的读取结束和写入结束,您必须触发另一个事件。因此,对于双工流end来说,这finish是阅读的结束,而是写作的结束。


1
而且还Transform流有两个endfinish事件。确实,它在延伸Duplex
罗科·穆索里诺

在Node.js版本8之后,这对于Steam API是否仍然有效?
亚历山大·米尔斯

1
@AlexanderMills文档说了什么(nodejs.org/dist/latest-v12.x/​​docs/api/stream.html)?另外,您可以尝试使用简单的测试用例,例如fs.ReadStream和fs.WriteStream-nodejs.org/dist/latest-v12.x/​​docs/api/…。随意发表您的发现。
tiblu

end数据与finished 工作之间的关系是有道理的。一个可写对象可能已经收到了它将要获取的所有数据,例如,它end从上游收到了一个数据,但仍在工作。(我不确定,但猜想finished总是要进行转换end吗?)
Craig Hicks
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.