我正在尝试理解node.js流。由于写入器对象方法上的write方法是异步的,计数器值是否会乱序?
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发布于 2021-05-23 10:18:57
不,柜台不会出故障的。当你调用.write()时,Streams会将项目插入到输出缓冲区中,并且所有的写操作都会按顺序被调用。
但是,像这样的循环需要在writer.write()上进行流控制,因为如果它返回false,那么在流上的drain事件指示有更多的写入空间之前,您不能再写入。有关更多信息,请参阅文档中的here。
write.write()函数是异步的,但是由于流上的缓冲和其他事件,您不必为每次写入都注册一个完整的回调。write.write()将数据放入出站缓冲区,并在成功缓冲数据时立即返回true,如果缓冲区中没有空间,则立即返回false。
对文件流的实际写入确实是异步的,并且大部分发生在您的视线之外。来自异步部分的错误通过流上的error事件传递,并且,正如您已经在做的那样,流的完成也通过事件传递。
在Hello之后获得Finished Writing的原因是因为在幕后进行异步编写。您的for循环启动了写操作,但是当for循环完成时,它们还没有完成。它们会在一段时间后结束(当您看到finish事件时)。
https://stackoverflow.com/questions/67655307
复制相似问题