繁体   English   中英

计数器值可以不按排序顺序吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM