Node.js 事件模块

目录

events 模块为提供了 EventEmitter 类,这是在 Node.js 中处理事件的关键。

JS
const EventEmitter = require('events')
const door = new EventEmitter()

事件监听器返回及使用以下事件:

  • 当监听器被添加时返回 newListener
  • 当监听器被移除时返回 removeListener

以下是最常用的方法的详细说明:

emitter.addListener()

emitter.on() 的别名。

emitter.emit()

触发事件。 按照事件被注册的顺序同步地调用每个事件监听器。

JS
door.emit("slam") // 触发 "slam" 事件。

emitter.eventNames()

返回字符串(表示在当前 EventEmitter 对象上注册的事件)数组:

JS
door.eventNames()

emitter.getMaxListeners()

获取可以添加到 EventEmitter 对象的监听器的最大数量(默认为 10,但可以使用 setMaxListeners() 进行增加或减少)。

JS
door.getMaxListeners()

emitter.listenerCount()

获取作为参数传入的事件监听器的计数:

JS
door.listenerCount('open')

emitter.listeners()

获取作为参数传入的事件监听器的数组:

JS
door.listeners('open')

emitter.off()

emitter.removeListener() 的别名,新增于 Node.js 10。

emitter.on()

添加当事件被触发时调用的回调函数。

用法:

JS
door.on('open', () => {
console.log('打开')
})

emitter.once()

添加当事件在注册之后首次被触发时调用的回调函数。 该回调只会被调用一次,不会再被调用。

JS
const EventEmitter = require('events')
const ee = new EventEmitter()
ee.once('my-event', () => {
//只调用一次回调函数。
})

emitter.prependListener()

当使用 onaddListener 添加监听器时,监听器会被添加到监听器队列中的最后一个,并且最后一个被调用。 使用 prependListener 则可以在其他监听器之前添加并调用。

emitter.prependOnceListener()

当使用 once 添加监听器时,监听器会被添加到监听器队列中的最后一个,并且最后一个被调用。 使用 prependOnceListener 则可以在其他监听器之前添加并调用。

emitter.removeAllListeners()

移除 EventEmitter 对象的所有监听特定事件的监听器:

JS
door.removeAllListeners('open')

emitter.removeListener()

移除特定的监听器。 可以通过将回调函数保存到变量中(当添加时),以便以后可以引用它:

JS
const doSomething = () => {}
door.on('open', doSomething)
door.removeListener('open', doSomething)

emitter.setMaxListeners()

设置可以添加到 EventEmitter 对象的监听器的最大数量(默认为 10,但可以增加或减少)。

JS
door.setMaxListeners(50)