You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 13:12:17