EventEmitter

Node.js 事件驱动架构的核心:EventEmitter 模式的定义、使用与原理。

#type / concept #status / growing #resource / nodejs #resource / javascript

[!info] related notes

EventEmitter

Node.js 核心 API 很多都建立在 EventEmitter 之上,它是事件驱动架构的基础。

一句话定义

EventEmitter 是一个发布-订阅模式的实现:对象触发事件,监听器响应该事件。

核心 API

import { EventEmitter } from 'node:events';

const bus = new EventEmitter();

// 注册监听器
bus.on('message', (data) => {
  console.log('收到:', data);
});

// 触发事件
bus.emit('message', 'hello');

// 一次性监听
bus.once('init', () => {
  console.log('只执行一次');
});

// 移除监听器
bus.off('message', handler);

核心方法

方法说明
on(event, fn)注册监听器
once(event, fn)一次性监听
emit(event, ...args)触发事件
off(event, fn)移除监听器
removeAllListeners(event)移除全部

Node.js 中哪些模块用到了它

  • fs 的文件监视
  • http 的请求/响应
  • stream 的数据事件
  • process 对象
  • net 的连接事件

自定义业务事件总线

const bus = new EventEmitter();

bus.on('orderCreated', (order) => {
  console.log('处理订单', order.id);
});

bus.on('orderCreated', (order) => {
  console.log('发送通知');
});

bus.emit('orderCreated', { id: 123 });

最容易误解的点

  • EventEmitter 不是 Node 独有的设计,浏览器中也有类似模式
  • 同一个事件可以注册多个监听器,按注册顺序执行
  • 忘记移除监听器会导致内存泄漏

放回主题图里看

创建于 2026/3/19 更新于 2026/5/27