Node.js 事件模块
目录
events
模块为提供了 EventEmitter 类,这是在 Node.js 中处理事件的关键。
JSconst EventEmitter = require('events')const door = new EventEmitter()
事件监听器返回及使用以下事件:
- 当监听器被添加时返回
newListener
。 - 当监听器被移除时返回
removeListener
。
以下是最常用的方法的详细说明:
emitter.addListener()
emitter.on()
的别名。
emitter.emit()
触发事件。 按照事件被注册的顺序同步地调用每个事件监听器。
JSdoor.emit("slam") // 触发 "slam" 事件。
emitter.eventNames()
返回字符串(表示在当前 EventEmitter
对象上注册的事件)数组:
JSdoor.eventNames()
emitter.getMaxListeners()
获取可以添加到 EventEmitter
对象的监听器的最大数量(默认为 10,但可以使用 setMaxListeners()
进行增加或减少)。
JSdoor.getMaxListeners()
emitter.listenerCount()
获取作为参数传入的事件监听器的计数:
JSdoor.listenerCount('open')
emitter.listeners()
获取作为参数传入的事件监听器的数组:
JSdoor.listeners('open')
emitter.off()
emitter.removeListener()
的别名,新增于 Node.js 10。
emitter.on()
添加当事件被触发时调用的回调函数。
用法:
JSdoor.on('open', () => {console.log('打开')})
emitter.once()
添加当事件在注册之后首次被触发时调用的回调函数。 该回调只会被调用一次,不会再被调用。
JSconst EventEmitter = require('events')const ee = new EventEmitter()ee.once('my-event', () => {//只调用一次回调函数。})
emitter.prependListener()
当使用 on
或 addListener
添加监听器时,监听器会被添加到监听器队列中的最后一个,并且最后一个被调用。
使用 prependListener
则可以在其他监听器之前添加并调用。
emitter.prependOnceListener()
当使用 once
添加监听器时,监听器会被添加到监听器队列中的最后一个,并且最后一个被调用。
使用 prependOnceListener
则可以在其他监听器之前添加并调用。
emitter.removeAllListeners()
移除 EventEmitter
对象的所有监听特定事件的监听器:
JSdoor.removeAllListeners('open')
emitter.removeListener()
移除特定的监听器。 可以通过将回调函数保存到变量中(当添加时),以便以后可以引用它:
JSconst doSomething = () => {}door.on('open', doSomething)door.removeListener('open', doSomething)
emitter.setMaxListeners()
设置可以添加到 EventEmitter
对象的监听器的最大数量(默认为 10,但可以增加或减少)。
JSdoor.setMaxListeners(50)