Node.js events 模块
Node.js 核心 API 采用异步事件驱动架构,基于发布-订阅设计模式。events 模块提供了 EventEmitter 类。
发布者 → 调度中心 → 所有订阅者(解耦,互不依赖)
基本用法
js
const EventEmitter = require('events')
const event = new EventEmitter()
// 监听事件
event.on('test', (data) => {
console.log(data)
})
// 派发事件
event.emit('test', 'hello world')核心 API
on / emit
注册监听和派发事件。同一个事件可注册多个监听函数。
once — 只监听一次
即使 emit 多次也只触发一次。
js
event.once('test', (data) => console.log(data))
event.emit('test', 'A') // 触发
event.emit('test', 'B') // 不触发off — 取消监听
注意:必须传入同一个函数引用。
js
const fn = (msg) => console.log(msg)
event.on('test', fn)
event.off('test', fn) // 取消
event.emit('test', 'xxx') // 不会触发setMaxListeners(n)
默认同一事件最多注册 10 个监听器,超出会警告。可调用此方法调大限制。
js
event.setMaxListeners(20)常见使用场景
process.on('exit', ...)/process.on('uncaughtException', ...)— Node.js 自身的事件child_process的stdout.on('data', ...)、fork的.on('message', ...)- 自定义事件驱动的业务逻辑