根据 文档对events模块下的事件和方法做了一次分类,方便日后快速对号入座
使用事件模块
const events = require('events');
实例化事件
const myEvent = new events.EventEmittor()myEvent.on('myClick',()=>{ // ... // 注意箭头函数的 this 不指向 EventEmitter实例 → ‘myEvent’ // 声明式函数的 this 指向 EventEmitter实例 → ‘myEvent’})复制代码
注册监听与触发事件
- emitter.on(eventName, listener)为
eventName
事件注册监听器(可调用多次) - emitter.once(eventName, listener)为
eventName
事件注册监听器(只能调用一次) - emitter.emit(eventName[, ...args])触发事件,并可以同时传递参数
- emitter.addListener(eventName, listener)
on
事件的别名
移除事件监听
注意:移除前会被调用一次
- emitter.removeAllListeners([eventName])移除事件名为
eventName
的所有监听器 - emitter.removeListener(eventName, listener)移除事件名为
eventName
的listener
监听器
添加
listener
到evnetName
监听器数组的开头
- 多次调用并传入相同的
eventName
和listener
会导致listener
被添加与调用多次。 - emitter.prependOnceListener(eventName, listener)下次触发
eventName
事件时,监听器会被移除,然后调用
获取事件监听器的集合与数量
- emitter.eventNames()返回一个列出触发器已注册监听器的事件的数组
- emitter.listeners(eventName)返回名为 eventName 的事件的监听器数组的副本
- emitter.listenerCount(eventName)返回正在监听名为 eventName 的事件的监听器的数量
设置事件可以注册的监听器数量
- EventEmitter.defaultMaxListeners设置所有实例的默认监听器数量
- emitter.setMaxListeners(n)设置单个实例的监听器数量
- emitter.getMaxListeners()返回
EventEmitter
当前的最大监听器限制值
newListener 事件
实例会在一个监听器被添加到其内部监听器数组之前触发自身的 newListener
事件。 在 newListener
回调函数中, 一个监听器的名字如果和已有监听器名称相同, 则在被插入到 EventEmitter
实例的内部监听器数组时, 该监听器会被添加到其它同名监听器的前面
removeListener 事件
在 listener 被移除后触发。
error 事件
当 EventEmitter
实例中发生错误时,会触发一个 error
事件
// 作为最佳实践,应该始终为 'error' 事件注册监听器。const myEmitter = new MyEmitter();myEmitter.on('error', (err) => { console.error('有错误');});myEmitter.emit('error', new Error('whoops!'));// 打印: 有错误复制代码