write()的文档说:
返回 false 表示内核缓冲区已满,以后会发出数据。
事件的文件drain
说:
在 write() 方法返回 false 后,会发出此事件以指示再次写入是安全的。
这意味着什么?我必须等待drain
事件才能再次写作吗?我试图写入的数据发生了什么?那是丢了吗?当我在不等待drain
事件的情况下调用 write 会发生什么?
@TooTallNate 答案是错误的。你应该绝对关心.write
返回值。
这意味着什么?我是否必须等待排水事件才能再次写入?
是的,当.write
返回 false 时,您必须等待。
我试图写入的数据发生了什么?那是丢了吗?
不,它没有丢失,它以正确的顺序缓冲。
当我在没有等待排水事件的情况下调用 write 会发生什么?
如果您没有正确处理 drain 事件,您的脚本将阻塞事件循环,并最终耗尽内存限制使您的应用程序崩溃。
我在另一个问题中给出了详细解释:为什么尝试写入大文件会导致js堆内存不足
您可以安全地调用write()
而不关心返回值。当内核缓冲区已满时,Node 将缓冲任何写入调用,并按您期望的顺序推送它们。您无需等待'drain'
事件再次写入。
或者,您可以检查的返回值,write()
然后通知正在写入 Stream 缓冲区已满的事物。这正是这样Stream#pipe()
做的。
所以通常,只需使用Stream#pipe()
,所有的好东西都会为你处理好 :)