📅  最后修改于: 2023-12-03 15:03:14.298000             🧑  作者: Mango
stream.finished()
方法是 Node.js stream 模块提供的一个 API,用于判断一个可读流或可写流是否已经结束。本文将详细介绍该方法的使用和注意事项。
stream.finished(stream[, options], [callback])
error
是否应该作为常规流事件触发,默认为 true。返回 stream 对象,可以链式调用。
判断可写流是否已经结束:
const fs = require('fs');
const { finished } = require('stream');
const writeStream = fs.createWriteStream('output.txt');
writeStream.write('write something\n');
writeStream.end(() => {
console.log('write end');
finished(writeStream, (err) => {
if (err) {
console.error('write stream failed', err);
} else {
console.log('write stream finished');
}
});
});
判断可读流是否已经结束:
const fs = require('fs');
const { finished } = require('stream');
const readStream = fs.createReadStream('input.txt');
let content = '';
readStream.on('data', chunk => {
content += chunk;
});
readStream.on('end', () => {
console.log('read end');
finished(readStream, (err) => {
if (err) {
console.error('read stream failed', err);
} else {
console.log('read stream finished');
console.log('content:', content);
}
});
});
stream.finished()
方法只能在 Node.js v10.17.0 及以上的版本中才能使用。
如果流已经结束,stream.finished()
方法立即调用回调函数。
如果指定了 options
,并且指定了 error: true
,则流读取时发生的错误将被作为常规流事件触发。如果不希望错误在异常对象属性中捕获,可以使用 stream.destroy()
方法销毁流。
如果流在调用回调函数之前销毁,将会在回调函数中触发错误事件。
stream.finished()
方法不能用于 Duplex 流和 Transform 流。