Когда вы открываете файл с помощью fs.createWriteStream
, как вы справляетесь со случаем, когда базовый файл удаляется (например, третьей стороной, такой как logrotate
)?
Ни одно из нормальных событий не кажетсяв этом случае.
Например:
const stream = fs.createWriteStream(filename, { flags: 'a' });
// None of these seem to fire
stream.on('close', () => console.log('CLOSED'));
stream.on('error', () => console.log('ERRORED'));
stream.on('finish', () => console.log('FINISHED'));
stream.write('foo');
// wait for flush...
fs.unlinkSync(filename);
// This doesn't work, but also doesn't error
stream.write('bar');
Рабочий пример: https://runkit.com/alecgibson/5da4545e76e836001a191ec0
Связанный:
Примечания:
- Узел v12.10.0 добавил параметр
emitClose
, который предположительно исправляет это (?), Но яхотел бы сделать это в v10 (LTS)