EventEmitter 的原理是什么?有哪些注意点?
EventEmitter 本质是发布-订阅:内部维护 事件名 → 回调数组 的 Map,on 注册、emit 触发、off 移除。
import { EventEmitter } from 'events'
class MyBus extends EventEmitter {}
const bus = new MyBus()
bus.on('data', (x) => console.log(x))
bus.emit('data', 42)注意点:
- 内存泄漏高发区:
on后若不再off,且 emitter 长期存活,回调与其闭包引用无法回收 - 同一事件监听器超过 10 个会告警(
setMaxListeners调整) once注册只触发一次的监听(内部用off自动移除)emit抛出的异常需自行 catch,否则冒泡成uncaughtException