繁体   English   中英

在关闭文件流之前,如何等待它完成写操作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM