events
模块是 Node.js 核心模块之一,用于实现事件触发器和事件监听器的模式。这种模式允许你创建、触发和处理事件。以下是 events
模块的一些主要内容和使用方法的详细讲解:
1. 创建 EventEmitter 实例
-
events.EventEmitter
类:EventEmitter
是一个事件触发器的基类,你可以通过继承它来创建自定义的事件类。const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter();
2. 监听事件
-
eventEmitter.on(eventName, listener)
: 向事件注册一个监听器。myEmitter.on('event', () => { console.log('Event occurred!'); });
-
eventEmitter.once(eventName, listener)
: 注册一个一次性监听器,该监听器只会在事件第一次被触发时调用。myEmitter.once('event', () => { console.log('This listener will only be called once.'); });
3. 触发事件
-
eventEmitter.emit(eventName[, ...args])
: 触发指定的事件。myEmitter.emit('event');
你还可以传递参数给监听器:
myEmitter.emit('event', 'arg1', 'arg2');
4. 移除事件监听器
-
eventEmitter.removeListener(eventName, listener)
: 从事件中移除指定的监听器。const listener = () => { console.log('Event occurred!'); }; myEmitter.on('event', listener); // 后续移除监听器 myEmitter.removeListener('event', listener);
-
eventEmitter.removeAllListeners([eventName])
: 移除指定事件的所有监听器。myEmitter.removeAllListeners('event');
5. 获取事件监听器数量
-
eventEmitter.listenerCount(eventName)
: 获取指定事件的监听器数量。const count = myEmitter.listenerCount('event'); console.log(`${count} listeners listening to the 'event' event`);
完整的示例
下面是一个完整的示例,演示了如何使用 events
模块创建、监听和触发事件:
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// 监听事件
myEmitter.on('event', () => {
console.log('Event occurred!');
});
// 一次性监听器
myEmitter.once('onceEvent', () => {
console.log('This listener will only be called once.');
});
// 触发事件
myEmitter.emit('event');
myEmitter.emit('onceEvent');
// 再次触发 onceEvent,但监听器不会再次执行
myEmitter.emit('onceEvent');
// 移除监听器
const listener = () => {
console.log('Event occurred!');
};
myEmitter.on('removeEvent', listener);
myEmitter.removeListener('removeEvent', listener);
// 移除所有监听器
myEmitter.removeAllListeners('removeEvent');
// 获取监听器数量
const count = myEmitter.listenerCount('event');
console.log(`${count} listeners listening to the 'event' event`);
这个例子包含了创建事件触发器、注册监听器、触发事件、移除监听器等常见的 events
模块操作。