EventEmitter
是 Node.js 中的一个核心类,它实现了事件驱动的编程模式。EventEmitter
类允许你定义事件监听器,并在特定条件下触发这些监听器。它是许多 Node.js 内置模块的基础,例如 net
、http
和 fs
模块等。
创建 EventEmitter 实例
要使用 EventEmitter
,首先需要从 events
模块导入它,然后创建一个新的实例。
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
注册事件监听器
你可以使用 on
方法注册事件监听器。当特定事件被触发时,相应的监听器就会被调用。
myEmitter.on('event-name', function listener() {
console.log('An event occurred!');
});
触发事件
使用 emit
方法来触发事件。你可以传递任意数量的参数给事件监听器。
myEmitter.emit('event-name', 'This is the first argument', 'And this is the second one');
示例:使用 EventEmitter
下面是一个简单的示例,展示了如何使用 EventEmitter
。
const EventEmitter = require('events');
class MyEventEmitter extends EventEmitter {}
const myEmitter = new MyEventEmitter();
// 注册事件监听器
myEmitter.on('custom-event', (arg1, arg2) => {
console.log('Event triggered with arguments:', arg1, arg2);
});
// 触发事件
myEmitter.emit('custom-event', 'Hello', 'World');
// 注册第二个监听器
myEmitter.on('custom-event', () => {
console.log('Second listener triggered');
});
// 再次触发事件
myEmitter.emit('custom-event', 'Goodbye', 'Moon');
EventEmitter 的方法
EventEmitter
提供了一系列的方法来帮助你管理事件和监听器。
emitter.on(eventName, listener)
注册一个监听器到指定的事件上。
emitter.emit(eventName[, ...args])
触发一个事件,并可选地传递参数给监听器。
emitter.once(eventName, listener)
注册一个监听器到指定的事件上,但只会被触发一次。
emitter.removeListener(eventName, listener)
移除指定的监听器。
emitter.removeAllListeners([eventName])
移除所有监听器,或者仅移除特定事件的所有监听器。
emitter.listeners(eventName)
返回一个监听器数组,这些监听器被注册到了特定事件上。
emitter.prependListener(eventName, listener)
与 on
类似,但在事件监听器数组的开头添加新的监听器。
emitter.prependOnceListener(eventName, listener)
与 once
类似,但在事件监听器数组的开头添加新的监听器,且只会被触发一次。
emitter.setMaxListeners(n)
设置最大监听器数量。默认情况下,每个事件的最大监听器数量是 10。
emitter.eventNames()
返回所有事件名称的数组。
emitter.listenerCount(eventName)
返回指定事件的监听器数量。
示例:使用 EventEmitter 实现简单的计数器
下面是一个更具体的示例,展示如何使用 EventEmitter
实现一个简单的计数器。
const EventEmitter = require('events');
class Counter extends EventEmitter {
constructor() {
super();
this.count = 0;
}
increment() {
this.count++;
this.emit('count-updated', this.count);
}
}
const counter = new Counter();
counter.on('count-updated', (newCount) => {
console.log('Counter updated:', newCount);
});
// 增加计数器
counter.increment();
counter.increment();
counter.increment();
总结
EventEmitter
是 Node.js 中非常重要的类,它提供了创建事件驱动程序的基础。通过使用 EventEmitter
,你可以轻松地为你的应用程序添加事件驱动的功能,从而实现更加灵活和响应迅速的设计。