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);