Javascript 在WriteStream中修改或删除同一文件时处理文件的删除

Javascript 在WriteStream中修改或删除同一文件时处理文件的删除,javascript,node.js,async-await,fs,nodejs-stream,Javascript,Node.js,Async Await,Fs,Nodejs Stream,使用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

使用
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');
工作示例:

相关的:

注:

  • 节点v12.10.0添加了
    emitClose
    选项,这可能会修复这个(?),但我想在v10(LTS)中这样做