PassThrough stream.write何时会抛出ERR_STREAM_DESTROYED或销毁后不执行操作?

问题描述

我的代码:

const PassThrough = require('stream').PassThrough
const strm = new PassThrough()
strm.destroy()
strm.write('abcd')  // no-op

最后一个strm.write不执行任何操作,并在节点14.7(最新)中返回false,并在节点12.18.3(LTS)中抛出ERR_STREAM_DESTROYED

documentation of LTS node中,

销毁流。 (可选)发出一个'error'事件,并发出一个 'close'事件(除非将emitClose设置为false)。通话后, 可写流已结束,随后对write()end()的调用 将导致ERR_STREAM_DESTROYED错误。这是破坏性的 即时销毁流的方法先前对write()的呼叫可能 尚未耗尽,并可能触发ERR_STREAM_DESTROYED错误。采用 如果在关闭或等待之前刷新数据,则end()而不是销毁 销毁流之前先处理'drain'事件。

因此它明确表示它将抛出ERR_STREAM_DESTROYED

但是,在documentation of latest node中,添加了以下句子。

一旦destroy()被呼叫,则任何其他呼叫都将成为noop并且没有 除_destroy以外的其他错误可能会以'error'的形式发出。

虽然先前关于ERR_STREAM_DESTROYED的文档没有失效。

销毁的write流的PassThrough方法在节点14中抛出ERR_STREAM_DESTROYED或不进行操作的确切条件是什么?请提供引发ERR_STREAM_DESTROYED的概念验证代码。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...