node.js 入门教程之九 -- events 模块
在之前介绍 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 模块最常用功能的介绍。
标签:无