Node.js Writable流执行readable.push(null)后未触发finish事件
问题原因与解决方案
你的Writable流未触发finish事件的核心原因是自定义的write方法没有调用完成回调。Node.js的Writable流要求在处理完每个数据块后,调用write方法的第三个参数(回调函数)来告知流当前数据已处理完毕,这样流才能推进后续流程,直到所有数据处理完成后触发finish。
修改后的代码
import { Readable, Writable } from 'stream'; const readable = new Readable(); const writable = new Writable({ // 补充encoding和callback参数 write: (data, encoding, callback) => { console.log('write', data.toString()); callback(); // 调用回调通知数据处理完成 } }); writable.on('finish', () => { console.log('finish'); }); readable.pipe(writable); readable.push('test'); readable.push(null);
关键说明
- 调用
callback()是触发finish的必要条件:只有当所有数据块的回调都被调用,且Readable流结束后,Writable才会触发finish事件。 - 关于你尝试的其他事件:
end是Readable流的事件,而非Writable的;close仅在流关闭底层资源时触发,此场景未涉及资源关闭;- Node.js流不存在
complete事件,无需监听。
内容的提问来源于stack exchange,提问作者sezanzeb
相关产品推荐
相关产品推荐

