Javascript stream.Readable.prototype.on如何处理node.js源代码中的事件?

Javascript stream.Readable.prototype.on如何处理node.js源代码中的事件?,javascript,node.js,Javascript,Node.js,在Node.js中阅读stream.Readable的代码时,我感到困惑 以下是源代码: 显然,if语句只处理data和Readable事件,但是根据流的on方法,Readable还接受其他事件,例如close,end,error 所以我的问题是: 根据源代码,stream.Readable如何处理除数据和Readable之外的其他事件?您在这里看到的是()方法,以便Readable类可以查看正在连接的事件侦听器,并可以在有人为数据事件或Readable事件安装侦听器时执行一些特殊操作 此函数

Node.js
中阅读
stream.Readable
的代码时,我感到困惑

以下是源代码:

显然,
if
语句只处理
data
Readable
事件,但是根据
流的
on
方法,Readable
还接受其他事件,例如
close
end
error

所以我的问题是:


根据源代码,
stream.Readable
如何处理除
数据
Readable
之外的其他事件?

您在这里看到的是()方法,以便
Readable
类可以查看正在连接的事件侦听器,并可以在有人为
数据
事件或
Readable
事件安装侦听器时执行一些特殊操作

此函数的第一行:

const res = Stream.prototype.on.call(this, ev, fn);
是Readable将回调和事件名参数传递给其父级以便运行正常实现的位置。
Stream
实现了
EventEmitter
接口,因此使用
Stream.prototype.on.call调用超级方法(this,ev,fn)
将给出
.on()
这是预期的默认行为

然后在调用父级之后,它检查某人正在侦听的事件是
数据
事件还是
可读
事件,然后在连接其中一个事件侦听器时实现一些额外的功能

对于
数据
事件,它将恢复流,以便在流暂停且设置为流动模式时,流将开始流动。这可能是因为当最初创建和配置
可读
时,如果它在附加
数据
事件侦听器之前开始流,那么流上的数据可能会丢失。所以,直到有人在旁边听
数据
事件,它才会开始流动


请注意,流上可能会发生很多over事件,这些事件都是由第一行中对基类的调用来处理的。这里看到的只是
Readable
类在首次添加两个特定事件侦听器时想要实现的一些特殊行为。此代码不影响这些事件的发送时间或收听方式。当这些事件之一的侦听器第一次连接时,它只会在
可读的
状态下触发一些行为。

const res=Stream.prototype.on.call(this,ev,fn)
只有
数据
可读
事件特定于
可读
流,其余事件由基类
流处理
@PatrickRoberts感谢您的评论。我注意到这个语句,但没有意识到它将ev参数传递给Stream.on方法。我很清楚代码now@L.Dezhi-这回答了你的问题吗?是的,回答了。谢谢你的回答:)
const res = Stream.prototype.on.call(this, ev, fn);