返回false表示内核缓冲区已满,数据将在以后发送出去。
并且drain
事件的文档说明了:
在write()方法返回false后,会发出此事件以指示再次写入是安全的。
这是什么意思?在我再次写作之前,我是否必须等待drain
事件?我试图写的数据怎么了?丢了吗?当我在不等待drain
事件的情况下拨打电话时会发生什么?
答案 0 :(得分:6)
您可以在不关心安全返回值的情况下致电write()
。当内核缓冲区已满时,Node将缓冲所有写入调用,并按预期顺序推送它们。 不需要在再次写入之前等待'drain'
事件。
或者,您可以检查write()
的返回值,然后通知正在写入流的内容,即缓冲区已满。这正是Stream#pipe()
does。
通常情况下,只需使用Stream#pipe()
即可为您解决所有好事:)
答案 1 :(得分:1)
@TooTallNate的答案是错误的。您应该绝对关心.write
的返回值。
那是什么意思?我是否必须等待排空事件之前 可以再写一次吗?
是的,当.write
返回false时,您必须等待。
我尝试写入的数据发生了什么?丢了吗?
不,它不会丢失,它会以正确的顺序进行缓冲。
当我不等待消耗事件而调用write时会发生什么?
如果未正确处理耗用事件,则脚本将阻止事件循环,并最终耗尽内存限制,使应用程序崩溃。
我在另一个问题中给出了详细的解释:why does attempting to write large a large file cause js heap to run out of memory