EventEmitter
是 Node.js 中的一个核心类,用于实现发布/订阅模式,允许对象发出事件,其他对象可以监听这些事件,并在事件发生时接收通知。
EventEmitter 的基本使用
EventEmitter
类提供了以下核心方法:
on(eventName, listener)
:绑定事件处理函数到指定事件。emit(eventName, [arg1], [arg2], [...])
:触发事件,可以传递任意数量的参数给监听器。once(eventName, listener)
:绑定一个单次监听器,当事件首次触发后,监听器会被自动移除。removeListener(eventName, listener)
:移除特定事件的特定监听器。removeAllListeners([eventName])
:移除所有事件的所有监听器,或者移除特定事件的所有监听器。
代码示例
下面是一个使用 EventEmitter
的简单示例:
// 引入 events 模块
var events = require('events');
// 创建一个 EventEmitter 对象
var emitter = new events.EventEmitter();
// 定义一个事件处理函数
var eventHandler = function() {
console.log('事件被触发');
};
// 绑定事件处理函数到 'myEvent' 事件
emitter.on('myEvent', eventHandler);
// 触发 'myEvent' 事件
emitter.emit('myEvent'); // 输出:事件被触发
// 使用 once 绑定一个单次监听器
emitter.once('myEvent', function() {
console.log('这个监听器只会触发一次');
});
// 再次触发 'myEvent' 事件
emitter.emit('myEvent'); // 输出:事件被触发 和 这个监听器只会触发一次
// 单次监听器不会被再次触发
emitter.emit('myEvent'); // 只输出:事件被触发
事件和参数
事件监听器可以接收传递给 emit
方法的参数:
// 绑定事件监听器,可以接收两个参数
emitter.on('myEvent', function(arg1, arg2) {
console.log('事件被触发,参数1:' + arg1 + ',参数2:' + arg2);
});
// 触发事件并传递参数
emitter.emit('myEvent', '参数值1', '参数值2'); // 输出:事件被触发,参数1:参数值1,参数2:参数值2
移除监听器
你可以使用 removeListener
方法来移除不再需要的事件监听器:
// 定义另一个事件处理函数
var anotherHandler = function() {
console.log('这个事件处理函数将被移除');
};
// 绑定事件处理函数
emitter.on('myEvent', anotherHandler);
// 触发事件
emitter.emit('myEvent'); // 输出:事件被触发 和 这个事件处理函数将被移除
// 移除事件处理函数
emitter.removeListener('myEvent', anotherHandler);
// 再次触发事件
emitter.emit('myEvent'); // 只输出:事件被触发