Node流中的end和finish事件之间有什么区别

Sim*_*ias 58 stream node.js

Node.js流触发两者end和finish事件.两者有什么区别?

tib*_*blu 104

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)是可读的可写流同时.要区分流的读取结束和写入结束,您必须触发不同的事件.因此,对于Duplex流end来说,读取finish结束并且写完了.

  • 数据的“结束”与“完成”的工作是有道理的。可写可能已经收到了它将要获取的所有数据,例如它从上游收到了“结束”,但仍在工作。(我不确定,但猜测对于转换来说,“完成”总是在“结束”之后?) (3认同)
  • 而且“Transform”流还具有“end”和“finish”事件。事实上,它扩展了“Duplex”。 (2认同)