【问题标题】:What's the difference between end and finish events in Node streamsNode流中的结束和完成事件有什么区别
【发布时间】:2015-04-04 18:08:39
【问题描述】:

Node.js 流触发endfinish 事件。两者有什么区别?

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

    endfinish 是相同的事件,但在不同类型的 Streams 上。

    • stream.Readable 仅触发 end 并且从不触发 finish
    • stream.Writable 仅触发 finish 并且从不触发 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 是写入结束。

    【讨论】:

    • 而且Transform 流同时具有endfinish 事件。事实上它扩展了Duplex
    • 这对于 Node.js 版本 8 之后的 Steams API 仍然有效吗?
    • @AlexanderMills 文档怎么说 (nodejs.org/dist/latest-v12.x/docs/api/stream.html)?此外,您可以尝试一个简单的测试用例,例如 fs.ReadStream 和 fs.WriteStream - nodejs.org/dist/latest-v12.x/docs/api/…。随时贡献您的发现。
    • end 的数据与 finished 的工作是有道理的。一个可写对象可能已经接收到它要获取的所有数据,例如它从上游收到end,但仍在工作。 (我不确定,但猜测finished 总是在end 之后进行转换?)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2014-08-28
    相关资源
    最近更新 更多