Node.js可写流被暂停后如何恢复?为什么emit('drain')后管道终止?
自定义可写流暂停后无法恢复问题排查
实现背景
- 正在基于Node.js Stream 模块开发自定义可写流
- 参考官方文档对可写流写入逻辑的说明:需要暂停可写流时,可在自定义的
_write方法中返回false;后续要恢复流的写入能力,需要触发drain事件 - 已校验自身实现逻辑完全对齐上述官方文档的要求
异常现象
实际运行后流并没有按预期恢复,反而在上游输入端仍有新数据待传输的情况下直接关闭了管道,具体表现:
- 代码路径已确认执行了
this.emit('drain');语句 - 触发该语句后,自定义的
_write()方法再也没有被触发,管道直接终止退出 - 已准备对应可复现的示例代码,运行方式为切换到项目「Shell」标签页执行
node index.js,可直接观察到触发drain事件后程序停止运行的异常
内容的提问来源于stack exchange,提问作者Onkeltem
相关产品推荐
相关产品推荐

