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 查询监听器状态
📝 发现内容有误?点击此处直接编辑