Node.js 什么';s节点流中结束和完成事件之间的差异

Node.js 什么';s节点流中结束和完成事件之间的差异,node.js,stream,Node.js,Stream,Node.js streams同时触发end和finish事件。两者之间的区别是什么?end和finish是相同的事件,但在不同类型的流上 stream.Readable仅激发end而从不激发finish stream.Writable仅激发finish而从不激发end 资料来源: 为什么同一事件的命名不同? 我能想到的唯一原因是因为双工流(stream.duplex),它实现了stream.Readable和stream.Writable接口()同时是可读和可写的流。要区分流上的读取结束和

Node.js streams同时触发
end
finish
事件。两者之间的区别是什么?

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

  • stream.Readable
    仅激发
    end
    而从不激发
    finish
  • stream.Writable
    仅激发
    finish
    而从不激发
    end
资料来源:

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


我能想到的唯一原因是因为双工流(
stream.duplex
),它实现了
stream.Readable
stream.Writable
接口()同时是可读和可写的流。要区分流上的读取结束和写入结束,必须触发不同的事件。因此,对于双工流,
end
是读取的结束,
finish
是写入的结束。

Transform
流都有
end
finish
事件。事实上,它扩展了
Duplex
。在Node.js版本8之后,这对steams API仍然有效吗?@AlexanderMills文档说了什么()?此外,您还可以尝试一个简单的测试用例,例如fs.ReadStream和fs.WriteStream-。请随意贡献您的发现。
end
数据与
finished
工作的对比是有意义的。可写文件可能已接收到它将要获取的所有数据,例如,它从上游接收到一个
end
,但仍在工作。(我不确定,但猜测转换
finished
总是在
end
之后。)