[英]How to wait before file stream is done writing before I close it?
我创建一个文件流来写入一个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();
但是,当我这样做时,文件的最后部分丢失了。 我在关闭流之前尝试入睡:
await Promise.delay(2000);
logger.end();
logger.close();
突然,文件完成了。 但是超时是种愚蠢的解决方案。 文件流写完后是否会发出任何事件。 基本上我需要的是:
await logger.doneWriting();
logger.end();
logger.close();
我当然可以承诺任何事件,但是那是哪个事件?
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实际上已成为一种标准,始终在寻找回调函数,这是使您可以在异步块完成后运行代码的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.