我想问下像这样的事件注册函数emitter.on(eventName, listener),里的eventName可以有哪些,怎样查看?
查文档
eventName 不是自定义的吗?
@guojingkang 你们是怎么知道的,是官网说明上写的吗?
@sunboy25 看官方api文档吧
emitter.on 函数要求 eventName 类型是字符串或者 symbol 即可,如果有明确的枚举值,会有说明的,下面举例也用到了 foo
。。。
@guojingkang 是不是使用一些固定事件名就不需要在另外编写触发函数触发它?我怎么上传不了图片,怪事! Event: 'abort’ Event: 'connect’ Event: 'continue’ Event: 'information’ Event: 'response’ Event: 'socket’ Event: 'timeout’ Event: ‘upgrade’
Event 是一个可以继承的类,每个 event 实例都有最基本的 on 和 emit 函数用来注册和触发事件,至于具体注册和触发什么的,由开发者本身去决定。比如我截图的这个,有若干个事件,是因为 NodeJs 源码中,http.server 继承了 event ,并注册了这些事件。不同的模块不同的类,nodeJs 源码给注册的事件是不同的。
@guojingkang q我想再问一下,你截图中http.server类下面的都叫事件吗?我原先以为写着事件的才叫事件呢,怪不得理解不了,另外这些事件在server.on(event,fun)时是不是都可以省略前面的sever,比如server.listening写成server.on(listening
,fun)的形式?
@sunboy25 写着是事件的才是事件,其他的不是
@guojingkang 那我就想不通了我这个server.on(listening,fun),这个listening事件是从那里来的,我只在net中net.server类中看到有这个事件。它怎么能用到这里的,net和http之间有什么联系吗?
@sunboy25 event 你可以理解为是一个数据结构,这个数据结构下面维护了这么一个 map
const eventsMap = {};
emitter.on = (eventName, fn) => {
if(eventsMap[eventName]){
eventsMap[eventName].push(fn)
}else{
eventsMap[eventName] = [fn]
}
}
emitter.emit = ( eventName, args) => {
eventsMap[eventName].forEach((fn) => {
fn.call(this,args)
})
}
@guojingkang 能不能把这个map位置发我一下的,我想看一下源码,这样是不是就能知道有多少事件可以用了?
@sunboy25 github nodeJs 仓库里面,events.js