gpt4 book ai didi

javascript - 在关闭文件流之前如何等待文件流完成写入?

转载 作者:行者123 更新时间:2023-12-01 03:35:08 25 4
gpt4 key购买 nike

我创建一个文件流来写入 csv 文件:

    var logger = fs.createWriteStream('restaurants.csv', {
flags: 'w' // 'a' means appending (old data will be preserved)
});
logger.write("sep=,\n");

当我写完后,我会像这样关闭流:

    logger.end();
logger.close();

但是当我这样做时,文件末尾的部分内容丢失了。我尝试在关闭流之前 sleep :

    await Promise.delay(2000);
logger.end();
logger.close();

突然之间,文件就完成了。但超时是一个有点愚蠢的解决方案。文件流完成写入后是否会发出任何事件。基本上我需要的是:

    await logger.doneWriting();
logger.end();
logger.close();

我当然可以 promise 任何事件,但它是哪个事件?

最佳答案

fs.createWriteStream()返回 WriteStream对象是 WritableStream ,这意味着当您调用 .write() 时,您正在调用 writable.write()它实际上将回调作为参数,因此您可以在流完成后立即关闭它!

var logger = fs.createWriteStream('restaurants.csv', {
flags: 'w' // 'a' means appending (old data will be preserved)
});
logger.write("sep=,\n", () => {
// Done writing... do what's needed then close the stream if it isn't used anymore
});

异步 ​​JavaScript 实际上已经成为当今的标准,始终留意回调函数,它允许您在异步 block 完成后运行代码。

关于javascript - 在关闭文件流之前如何等待文件流完成写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44329870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com