Node.js开发笔记——EventEmitter

Node.js开发笔记——EventEmitter

Node.js使用的是事件驱动模型。

可以通过EventEmitter来实现事件的监听和触发,Node.js中其他的异步API也都是通过继承EventEmitter实现的。

addListener/removeListener

为指定的事件添加一个监听器,可以为同一个事件添加多个监听器。

js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const events = require('node:events')

// 创建EventEmitter实例
const ee = new events.EventEmitter()

// 为同一个事件添加多个监听器
ee.addListener('event_name', handler1)
ee.addListener('event_name', handler2)
ee.addListener('event_name', handler3)

// 移除事件上指定的监听器
ee.removeListener('event_name', handler1)

// 移除事件上所有的监听器
ee.removeAllListener('event_name')

on/emit

on方法和addListener是一样的,on是简写。

js
1
2
3
4
5
6
7
// 监听事件,可以接受参数
ee.on('event_name', (arg1, arg2, ...) => {

})

// 触发事件,可以携带参数
ee.emit('event_name', arg1, arg2, ...)

once

可以使用once为事件添加单词监听器,监听器最多只会执行一次。

js
1
ee.once('event_name', handler)

setMaxListeners/defaultMaxListeners

EventEmitter默认限制了给同一个事件最大只能添加10个监听器,使用setMaxListeners可以指定限制数量。

js
1
ee.setMaxListeners(100)

或者可以直接设置默认最大数量:

js
1
2
3
// 设置为0解除限制
ee.defaultMaxListeners = 0
ee.defaultMaxListeners = 100

listeners

获取指定事件上绑定的所有的监听器。

js
1
const listeners = ee.listeners('event_name')

newListener事件

EventEmitter中的特殊事件。

js
1
2
3
4
ee.on('newListener', (event, listener) => {
console.log(`Event name: ${event}`)
console.log(`Listener function: ${listener}`)
})

removeListener事件

EventEmitter中的特殊事件。

js
1
2
3
4
ee.on('removeListener', (event, listener) => {
console.log(`Event name: ${event}`)
console.log(`Listener function: ${listener}`)
})

error事件

EventEmitter中的特殊事件。

js
1
2
3
4
5
ee.on('error', (arg1, arg2, ...) => {

})

ee.emit('error', arg1, arg2, ...)

在实际使用时,我们一般通过自定义类继承EventEmitter来实现。

评论