我想问下像这样的事件注册函数emitter.on(eventName, listener),里的eventName可以有哪些,怎样查看?
查文档
eventName 不是自定义的吗?
@guojingkang 你们是怎么知道的,是官网说明上写的吗?
@sunboy25 看官方api文档吧
@guojingkang https://nodejs.org/dist/latest-v14.x/docs/api/events.html#events_emitter_on_eventname_listener这个文档我翻过翻过去也没有找到你说明关于eventName的?
emitter.on 函数要求 eventName 类型是字符串或者 symbol 即可,如果有明确的枚举值,会有说明的,下面举例也用到了 foo 。。。
foo
@guojingkang 是不是使用一些固定事件名就不需要在另外编写触发函数触发它?我怎么上传不了图片,怪事! Event: 'abort’ Event: 'connect’ Event: 'continue’ Event: 'information’ Event: 'response’ Event: 'socket’ Event: 'timeout’ Event: ‘upgrade’
@sunboy25
Event 是一个可以继承的类,每个 event 实例都有最基本的 on 和 emit 函数用来注册和触发事件,至于具体注册和触发什么的,由开发者本身去决定。比如我截图的这个,有若干个事件,是因为 NodeJs 源码中,http.server 继承了 event ,并注册了这些事件。不同的模块不同的类,nodeJs 源码给注册的事件是不同的。
@guojingkang q我想再问一下,你截图中http.server类下面的都叫事件吗?我原先以为写着事件的才叫事件呢,怪不得理解不了,另外这些事件在server.on(event,fun)时是不是都可以省略前面的sever,比如server.listening写成server.on(listening,fun)的形式?
listening
@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
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
查文档
eventName 不是自定义的吗?
@guojingkang 你们是怎么知道的,是官网说明上写的吗?
@sunboy25 看官方api文档吧
@guojingkang https://nodejs.org/dist/latest-v14.x/docs/api/events.html#events_emitter_on_eventname_listener这个文档我翻过翻过去也没有找到你说明关于eventName的?
emitter.on 函数要求 eventName 类型是字符串或者 symbol 即可,如果有明确的枚举值,会有说明的,下面举例也用到了
foo。。。@guojingkang 是不是使用一些固定事件名就不需要在另外编写触发函数触发它?我怎么上传不了图片,怪事! Event: 'abort’ Event: 'connect’ Event: 'continue’ Event: 'information’ Event: 'response’ Event: 'socket’ Event: 'timeout’ Event: ‘upgrade’
@sunboy25
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
@guojingkang 能不能把这个map位置发我一下的,我想看一下源码,这样是不是就能知道有多少事件可以用了?
@sunboy25 github nodeJs 仓库里面,events.js