全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-15 5 分钟 ✍️ juanwangdev

Node.js 监听与触发事件

事件监听与触发是 Node.js 事件驱动编程的基础操作,掌握完整的 API 用法至关重要。

注册监听器

on 与 addListener

JavaScript
const EventEmitter = require('events');
const emitter = new EventEmitter();

// on 和 addListener 完全等价
emitter.on('data', (msg) => console.log(msg));
emitter.addListener('data', (msg) => console.log(msg));

prependListener(前置监听器)

JavaScript
emitter.on('order', () => console.log('第二执行'));
emitter.prependListener('order', () => console.log('第一执行'));

emitter.emit('order');
// 输出:
// 第一执行
// 第二执行

触发事件

JavaScript
// 无参数触发
emitter.emit('event');

// 带参数触发
emitter.emit('data', { id: 1, name: 'test' });

// 多参数触发
emitter.emit('message', 'hello', 123, true);

emit() 返回布尔值,表示是否有监听器处理了该事件。

移除监听器

JavaScript
function handler() {
  console.log('handler');
}

emitter.on('test', handler);
emitter.removeListener('test', handler);
// 或
emitter.off('test', handler); // Node.js 10+ 新增别名

// 移除某事件所有监听器
emitter.removeAllListeners('test');

// 移除所有事件的所有监听器
emitter.removeAllListeners();

移除监听器时必须传入相同的函数引用,匿名函数无法被移除。

获取监听器信息

JavaScript
// 获取监听器数量
emitter.listenerCount('data');

// 获取监听器数组
emitter.listeners('data');

// 获取所有事件名
emitter.eventNames();

要点总结

  • on/addListener 注册监听器,prependListener 添加到队列头部
  • emit 返回布尔值表示事件是否被处理
  • 移除监听器需传入相同函数引用
  • 使用 listenerCount 和 listeners 查询监听器状态

📝 发现内容有误?点击此处直接编辑

← 上一篇 Node.js 异步回调
下一篇 → Node.js 错误处理
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库