fs转储相当于NodeJs?
目的
强制fs(以及使用它的库)在终止应用程序之前将所有内容写入文件。
背景
我正在使用npm包csv-write-stream将对象写入CSV文件。
一旦库完成了CSV文件的写入,我想用process.exit()
终止我的应用程序。
码
为了达到上述目标,我写了以下内容:
let writer = csvWriter({ headers: ['country', 'postalCode'] }); writer.pipe(fs.createWriteStream('myOutputFile.csv')); //Very big array with a lot of postal code info let currCountryCodes = [{country: Portugal, postalCode: '2950-286'}, {country: Barcelona, postalCode: '08013'}]; for (let j = 0; j < currCountryCodes.length; j++) { writer.write(currCountryCodes[j]); } writer.end(function() { console.log('=== CSV written successfully, stopping application ==='); process.exit(); });
问题
这里的问题是,如果我执行process.exit()
,库没有时间写入文件,文件将是空的。
由于库使用fs
,我解决这个问题的方法是在fs.dump()
强制执行一个fs.dump()
或者类似的东西,但是在search之后,我没有发现类似的东西。
问题
- 在退出应用程序之前,如何强制fs将所有内容转储(推送)到文件中?
- 如果第一个选项不可行,是否有办法等待应用程序写入然后closures它?
我想你的猜测是对的。 当你调用process.exit()
,pipe道写入stream尚未完成写入。
如果你真的想明确地终止你的服务器,这将做。
let r = fs.createWriteStream('myOutputFile.csv'); writer.pipe(r); ... writer.end(function() { r.end(function() { console.log('=== CSV written successfully, stopping application ==='); process.exit(); }); });