我创建一个文件流来写入 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/