[英]Can counter value be not in sorted order?
我试图了解 node.js 流。 由于 writer object 方法上的 write 方法是异步的,那么 counter 值可以乱序吗?
const writer = fs.createWriteStream(path.resolve("modules", "streams", "hello"));
writer.on("finish", () => console.log("Finished Writing"));
for (let i = 0; i < 1000; i++) writer.write(`Hello:${i}`); // this is async, according to me
writer.end();
console.log("Hello");
Outputs:
Hello
Finished Writing
不,柜台不会出现故障。 当您调用.write()
时,流将项目插入到传出缓冲区中,并且按顺序调用所有写入。
但是,像这样的循环需要对writer.write()
进行流量控制,因为如果它返回false
,那么您将无法再写入,直到 stream 上的drain
事件表明还有更多的写入空间。 有关更多信息,请参阅文档中的此处。
write.write()
function 是异步的,但是由于 stream 上的缓冲和其他事件,您不必为每次写入都注册一个完整的回调。 write.write()
将数据放入出站缓冲区,并在数据成功缓冲后立即返回true
,如果缓冲区中没有空间,则立即返回false
。
对文件 stream 的实际写入确实是异步的,并且很大程度上发生在您的视野之外。 来自异步部分的错误通过 stream 上的error
事件进行通信,并且正如您已经在做的那样,stream 的完成也通过事件进行通信。
你在Hello
之后得到Finished Writing
的原因是因为幕后的异步写入。 您for
循环启动了写入,但是当for
循环完成时它们还没有完成。 他们稍后完成(当您看到finish
事件时)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.