EventEmitter 是 Node 事件驱动的基石:一个对象可以 emit(触发)具名事件,其他地方 on("> EventEmitter 是 Node 事件驱动的基石:一个对象可以 emit(触发)具名事件,其他地方 on("> EventEmitter 是 Node 事件驱动的基石:一个对象可以 emit(触发)具名事件,其他地方 on(">
Node.js 词条目录
前端Wiki/Node.js/进阶/事件 events

EventEmitter 基础

EventEmitter 是 Node 事件驱动的基石:一个对象可以 emit(触发)具名事件,其他地方 on(监听)这些事件。Node 自身的 http 服务器、fs 流都继承自它——你写的每一个 res.on('data') 都是 EventEmitter 在工作。

最小例子:const ee = new EventEmitter(); ee.on('hello', cb); ee.emit('hello')。emit 可以传任意参数给监听器;同一个事件可以注册多个监听器,按注册顺序执行。

  • on(事件, 回调) 注册监听;emit(事件, ...args) 触发并传参
  • once() 只监听一次;off()/removeListener() 移除监听
  • Node 内置模块大量基于它:流、http 服务器、process 都是事件源
JS
const { EventEmitter } = require('events');

// 浏览器里也能跑的纯逻辑演示
const bus = new EventEmitter();

bus.on('greet', (name) => console.log('你好,' + name));
bus.once('once-event', () => console.log('只触发一次'));

bus.emit('greet', 'Node');     // 你好,Node
bus.emit('greet', 'World');    // 你好,World
bus.emit('once-event');        // 只触发一次
bus.emit('once-event');        // 第二次无输出

// 监听 error 事件是 EventEmitter 的约定
bus.on('error', (e) => console.error('捕获错误:', e.message));
bus.emit('error', new Error('演示性异常'));
本节要点EventEmitter = 事件版“发布订阅”:on 订阅、emit 发布、once 一次性、error 事件必须有人接。