簡體   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