假设我有以下代码:
try {
let size = 0;
await pipeline(
fs.createReadStream('lowercase.txt'),
async function* (source) {
for await (const chunk of source) {
size += chunk.length;
if (size >= 1000000) {
throw new Error('File is too big');
}
yield String(chunk).toUpperCase();
}
},
fs.createWriteStream('uppercase.txt')
);
console.log('Pipeline succeeded.');
} catch (error) {
console.log('got error:', error);
}
如何确保在每种情况下都正确关闭流?节点文档没有多大帮助——他们只是告诉我我将有悬空事件侦听器:
stream.pipeline() 将在所有流上调用 stream.destroy(err),除了:
发出“结束”或“关闭”的可读流。
发出“完成”或“关闭”的可写流。
调用回调后,stream.pipeline() 会在流上留下悬空的事件侦听器。在失败后重用流的情况下,这可能会导致事件侦听器泄漏和吞噬错误。
守着星空守着你
慕工程0101907
相关分类