Node.js流触发end
和finish
事件。两者的区别是什么?
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
表示写入结束。
Transform
流具有end
和finish
事件。实际上它是Duplex
的扩展。 - Rocco Musolinofinish
,要么触发end
,这才是你回答的实际重点,而我在文档中找不到这一点。 - fishbone