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