在关闭文件流之前如何等待它完成写入?
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();
突然间,文件就完成了。但是超时是一种愚蠢的解决方案。 filestream 完成写入后是否发出任何事件。基本上我需要的是:
await logger.doneWriting();
logger.end();
logger.close();
我当然可以承诺任何事件,但它是哪个事件?
fs.createWriteStream() returns a WriteStream object which is a WritableStream, this means that when you call .write()
you're calling 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 如今实际上已成为标准,始终留意回调函数,它允许您在异步块完成后 运行 代码。
我创建一个文件流来写入一个 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();
突然间,文件就完成了。但是超时是一种愚蠢的解决方案。 filestream 完成写入后是否发出任何事件。基本上我需要的是:
await logger.doneWriting();
logger.end();
logger.close();
我当然可以承诺任何事件,但它是哪个事件?
fs.createWriteStream() returns a WriteStream object which is a WritableStream, this means that when you call .write()
you're calling 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 如今实际上已成为标准,始终留意回调函数,它允许您在异步块完成后 运行 代码。