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

Node.js的Readable流调用pause方法无法正常暂停,遗漏了什么配置?

问题根因

  • 核心原因是你使用了 pipe() 方法对接读写流,pipe() 内置了背压自动管理逻辑:只要可写流的缓存未达到高水位线,它会自动调用可读流的 resume() 方法恢复生产,你手动调用的 pause() 会被这个逻辑直接覆盖,无法生效。
  • 你自定义的 Readable 没有终止逻辑,read 钩子会无限调用 push() 生成数据,只要流处于流动状态就会持续生产内容。

修复方案

如果要实现手动控制可读流的暂停/恢复,不要使用 pipe() 自动对接,改为手动监听 data 事件处理数据即可,修改后的代码如下:

const { Readable, Writable } = require('stream');

const r = new Readable({
  read() {
    this.push(Math.random().toString());
  }
});

const w = new Writable({
  write(data, enc, next) {
    console.log(data.toString());
    setTimeout(next, 10)
  }
});

// 替换r.pipe(w) 改为手动监听data事件写数据
r.on('data', chunk => {
  w.write(chunk);
})

setInterval(() => {
  if(r.isPaused()) {
    console.log('>>>>>>>>>>>>>>>>>>> RESUMING')
    r.resume();
  } else {
    console.log('>>>>>>>>>>>>>>>>>>> PAUSING')
    r.pause();
  }
}, 1000);

修改后运行即可看到每秒切换暂停/恢复状态,输出也会对应停止/继续的效果。

内容的提问来源于stack exchange,提问作者Erik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:27:00