Node.js 流:'close' 事件 vs 'finish' 事件

10

NodeJS可写流的'close'和'finish'事件有何区别?

假设我们有一个向磁盘写入数据的可写流,那么在数据是否已经持久化到磁盘后,'close'事件和'finish'事件是否都会被触发?


请查看 https://nodejs.org/api/stream.html#stream_event_finish 和 https://nodejs.org/api/stream.html#stream_event_close - kg99
我看到它了,但我不明白“刷新到底层系统”究竟是什么意思。 - Nexx
看看我的回答。希望能有所帮助。 - kg99
非常感谢,我明白了 :)) - Nexx
1个回答

9

使用finish事件,数据被写入流后,流可能没有关闭。在文件关闭后会发出一次close事件。因此,finish事件将在close事件之前触发。

例如:

const writer = getWritableStreamSomehow();
for (let i = 0; i < 100; i++) {
    writer.write(`hello, #${i}!\n`);
}
writer.on('finish', () => {
    console.log('All data is written but file might NOT be closed');
});
writer.on('close', () => {
  console.log('All data written and file is closed');
});
writer.end('This is the end\n');

我们可以说编写文件包括打开文件、向文件写入数据和关闭文件。
在完成向文件写入操作后将发出Finish信号,在关闭文件操作后将发出Close信号。

1
如果我们有你的例子,当我们写入磁盘上的文件时,是否可能将文件写入可写流的内部缓冲区,但尚未保存到磁盘,并在此时触发“完成”事件(当数据仅存在于内存中而不在磁盘上)? - Nexx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接