在之前介绍 event loop 的章节,我们简单介绍了 events 模块的使用,它可以设置并监听某个信号并在信号触发时响应 callback function。

events 模块提供了 EventEmitter class 它是处理 events 的关键工具。

引入及初始化 events 模块如下:

const EventEmitter = require('events')
const eventEmitter = new EventEmitter()

每个 event listener 事件监听器都是互相独立的,同时它们使用如下 events:

  • newListener 当一个 event 被添加
  • removeListener 当一个 event 被删除

下面介绍常用的一些 method。

eventEmitter.addListener()

eventEmitter.addListener()eventEmitter.on() 功能相同。可以给某个 event 添加一个 listener,语法如下:

eventEmitter.addListener('test', () => {})

eventEmitter.emit()

eventEmitter.emit() 用来触发一个信号,信号触发后,对应信号的 event listener 会响应 callback function:

eventEmitter.addListener('test', () => { console.log('test emited') })
eventEmitter.emit('test')

//output:
//test emited

eventEmitter.eventNames()

eventEmitter.eventNames() 会返回当前 EventEmitter object 内注册已的 events 为一个字符串数组:

eventEmitter.addListener('test1', () => {})
eventEmitter.addListener('test2', () => {})
console.log(eventEmitter.eventNames())

//output:
//[ 'test1', 'test2' ]

eventEmitter.getMaxListeners()

eventEmitter.getMaxListeners() 返回当前 EventEmitter object 能添加的 event listener 最大数量。默认为 10 个,可以通过 setMaxListeners() 修改。

eventEmitter.listenerCount()

eventEmitter.listenerCount() 返回某个 event 定义的 listeners 数量:

eventEmitter.addListener('test4', () => { console.log('a') })
eventEmitter.addListener('test4', () => { console.log('b') })
console.log(eventEmitter.listenerCount('test4'))

//output:
//2

eventEmitter.listeners()

eventEmitter.listeners() 返回某个 event 所有的 listeners 为一个数组:

const f1 = () => {}
const f2 = () => {}
eventEmitter.addListener('test5', f1)
eventEmitter.addListener('test5', f2)
console.log(eventEmitter.listeners('test5'))

//output:
//[ [Function: f1], [Function: f2] ]

eventEmitter.off()

eventEmitter.off()eventEmitter.removeListener() 功能相同。可以删除一个 event 的某个 listener,需要指定 event 名称和 listener callback 名称:

const f3 = () => {}
eventEmitter.addListener('test6', f3)
eventEmitter.off('test6', f3)

eventEmitter.on()

eventEmitter.on()eventEmitter.addListener() 功能相同。可以给某个 event 添加一个 listener:

eventEmitter.on('test6', () => {})

eventEmitter.once()

eventEmitter.once() 监听一个 event 且其 callback function 只能被执行一次:

eventEmitter.once('test7', () => console.log('once show once'))
eventEmitter.emit('test7')
eventEmitter.emit('test7')

//output:
//once show once

eventEmitter.prependListener()

当通过 eventEmitter.on() 添加 listener 时,会按照添加顺序排列在此 event 队列中,当对应 event 触发时,会按照排列顺序以此执行 callback。

使用 eventEmitter.prependListener() 添加的 listener 会添加到队列的最前面,触发时最先被执行:

eventEmitter.on('test8', () => console.log('first listener'))
eventEmitter.prependListener('test8', () => console.log('second listener'))
eventEmitter.emit('test8')

//output:
//second listener
//first listener

eventEmitter.prependOnceListener()

eventEmitter.prependOnceListener()eventEmitter.on() 的区别和上面类似,会将 listener 添加到对应 event listeners 队列的最前面,然后最先被执行且只能响应一次:

eventEmitter.once('test9', () => console.log('first listener'))
eventEmitter.prependOnceListener('test9', () => console.log('second listener'))
eventEmitter.emit('test9')
eventEmitter.emit('test9')

//output:
//second listener
//first listener

eventEmitter.removeAllListeners()

eventEmitter.removeAllListeners() 可以删除指定 event 的所有 listeners:

eventEmitter.removeAllListeners('test9')

eventEmitter.removeListener()

eventEmitter.removeListener() 可以删除 event 的指定 listener。需要将 listener 的 callback function 定义为变量格式然后再调用,这样就可以在此 reference 它:

const f1 = () => {}
const f2 = () => {}
eventEmitter.addListener('test5', f1)
eventEmitter.addListener('test5', f2)

eventEmitter.removeListener('test5', f1)

eventEmitter.setMaxListeners()

eventEmitter.setMaxListeners() 可以定义 EventEmitter object 最大可以添加的 listeners 数量:

eventEmitter.setMaxListeners(20)
console.log(eventEmitter.getMaxListeners())

//output:
//20

以上就是 events 模块最常用功能的介绍。

标签:无

你的评论