Node.js流同时触发end
和finish
事件。两者有什么区别?
Answers:
end
并且finish
是在不同类型的流上的相同事件,但
stream.Readable
end
永远不会触发finish
stream.Writable
finish
永远不会触发end
来源:https : //nodejs.org/dist/latest-v5.x/docs/api/stream.html
为什么同一事件的命名不同?
我能想到的唯一原因是因为双工流(stream.Duplex
)可以实现stream.Readable
和stream.Writable
接口(https://nodejs.org/dist/latest-v5.x/docs/api/stream.html#stream_class_stream_duplex)同时可写流。要区分流上的读取结束和写入结束,您必须触发另一个事件。因此,对于双工流end
来说,这finish
是阅读的结束,而是写作的结束。
end
数据与finished
工作之间的关系是有道理的。一个可写对象可能已经收到了它将要获取的所有数据,例如,它end
从上游收到了一个数据,但仍在工作。(我不确定,但猜想finished
总是要进行转换end
吗?)
Transform
流有两个end
和finish
事件。确实,它在延伸Duplex
。