Skip to content

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_processstdout.on('data', ...)fork.on('message', ...)
  • 自定义事件驱动的业务逻辑