Fs дамп эквивалент в NodeJs?

Цель

Принуждение fs (и библиотек, использующих его) для записи всего в файлы до завершения приложения.

Фон

Я пишу объект в CSV файл, используя пакет npm csv-write-stream.

Как только библиотека закончит запись 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() или что-то подобное в NodeJs, но после поиска я ничего не нашел.

Вопросы

  • Как заставить fs сбрасывать (удалять) весь контент в файл перед выходом из приложения?
  • Если первый вариант невозможен, есть ли способ дождаться, когда приложение запишет, а затем закроет его?
1 ответ

Я думаю, что твоя догадка правильная. Когда вы вызываете process.exit(), поток записи по каналам еще не завершен.

Если вы действительно хотите явно закрыть свой сервер, это будет сделано.

let r = fs.createWriteStream('myOutputFile.csv');
writer.pipe(r);
...
writer.end(function() {
 r.end(function() {
 console.log('=== CSV written successfully, stopping application ===');
 process.exit();
 });
});

licensed under cc by-sa 3.0 with attribution.