Node.js 的 Events
模块为 Node.js 应用程序提供了事件驱动的架构。核心模块 events
中的 EventEmitter
类是所有可生成事件对象的基类。
要使用事件模块,首先需要在 Node.js 文件中引入它:
const EventEmitter = require('events');
EventEmitter
类EventEmitter
类是 Node.js 事件模块的核心。它用于创建和处理自定义事件。每个 EventEmitter
实例都可以注册多个事件和相应的事件处理函数(监听器)。
要创建一个新的 EventEmitter
实例,你可以使用 new
关键字:
const myEmitter = new EventEmitter();
EventEmitter
的方法EventEmitter
类提供了多种方法来操作事件和监听器:
emitter.on(eventName, listener)
为指定事件注册一个监听器。每次触发事件时都会调用此监听器。
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {
console.log('An event occurred!');
});
myEmitter.emit('event'); // 输出: An event occurred!
emitter.once(eventName, listener)
为指定事件注册一个一次性监听器。事件最多触发一次,触发后立即解除绑定。
const myEmitter = new EventEmitter();
myEmitter.once('event', () => {
console.log('This will only run once');
});
myEmitter.emit('event'); // 输出: This will only run once
myEmitter.emit('event'); // 不会输出任何内容
emitter.emit(eventName[, ...args])
触发指定事件,并传递参数给监听器。
const myEmitter = new EventEmitter();
myEmitter.on('eventWithArgs', (a, b) => {
console.log(a, b);
});
myEmitter.emit('eventWithArgs', 'arg1', 'arg2'); // 输出: arg1 arg2
emitter.off(eventName, listener)
(Node.js 10+)
移除指定事件的某个监听器,listener
必须是原来添加时使用的函数。
const myEmitter = new EventEmitter();
function log() {
console.log('Event happened!');
}
myEmitter.on('event', log);
myEmitter.off('event', log); // 移除监听器
myEmitter.emit('event'); // 不会输出任何内容
emitter.removeListener(eventName, listener)
removeListener()
是 off()
方法的别名。
const myEmitter = new EventEmitter();
function log() {
console.log('Event happened!');
}
myEmitter.on('event', log);
myEmitter.removeListener('event', log); // 移除监听器
myEmitter.emit('event'); // 不会输出任何内容
emitter.removeAllListeners([eventName])
移除指定事件的所有监听器,或者移除所有事件的所有监听器。
const myEmitter = new EventEmitter();
myEmitter.on('event', () => console.log('Listener 1'));
myEmitter.on('event', () => console.log('Listener 2'));
myEmitter.removeAllListeners('event');
myEmitter.emit('event'); // 不会输出任何内容
emitter.listeners(eventName)
返回指定事件的监听器数组。
const myEmitter = new EventEmitter();
function listener1() {}
function listener2() {}
myEmitter.on('event', listener1);
myEmitter.on('event', listener2);
console.log(myEmitter.listeners('event')); // 输出: [ [Function: listener1], [Function: listener2] ]
emitter.listenerCount(eventName)
返回指定事件的监听器数量。
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(myEmitter.listenerCount('event')); // 输出: 2
emitter.setMaxListeners(n)
默认情况下,EventEmitter
实例最多可以注册 10 个监听器。当超过这个限制时,会输出警告。使用 setMaxListeners
可以更改监听器的数量限制。
const myEmitter = new EventEmitter();
myEmitter.setMaxListeners(20);
emitter.getMaxListeners()
返回当前的监听器最大数量。
const myEmitter = new EventEmitter();
console.log(myEmitter.getMaxListeners()); // 输出: 10 (默认值)
EventEmitter
的事件EventEmitter
实例也会发出一些特定事件:
newListener
当添加新的监听器时触发。新监听器在添加之前触发。
const myEmitter = new EventEmitter();
myEmitter.on('newListener', (event, listener) => {
console.log(`Adding listener to ${event} event.`);
});
myEmitter.on('event', () => {});
// 输出: Adding listener to event event.
removeListener
当移除监听器时触发。监听器在被移除后触发。
const myEmitter = new EventEmitter();
function listener() {
console.log('Listener executed');
}
myEmitter.on('removeListener', (event, listener) => {
console.log(`Removing listener from ${event} event.`);
});
myEmitter.on('event', listener);
myEmitter.removeListener('event', listener);
// 输出: Removing listener from event event.
在 Node.js 中,事件驱动架构通常用于异步操作。处理错误事件对于保证应用程序的健壮性非常重要。如果 EventEmitter
实例发出 error
事件且没有相应的监听器,Node.js 将会抛出一个错误并退出程序。
const myEmitter = new EventEmitter();
// 添加错误事件的监听器
myEmitter.on('error', (err) => {
console.error('An error occurred:', err.message);
});
// 触发错误事件
myEmitter.emit('error', new Error('Something went wrong!'));
在实际应用中,可以创建自定义类继承 EventEmitter
,从而在类中使用事件功能。
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('Event fired!');
});
myEmitter.emit('event'); // 输出: Event fired!
EventEmitter
是 Node.js 事件驱动架构的核心,通过它可以轻松地处理异步事件流。掌握 EventEmitter
的方法和事件,有助于开发更高效、响应更灵敏的 Node.js 应用程序。使用事件驱动编程模式可以帮助你更好地处理异步操作,提高代码的可读性和维护性。
Node.js 的 Events
模块为 Node.js 应用程序提供了事件驱动的架构。核心模块 events
中的 EventEmitter
类是所有可生成事件对象的基类。
要使用事件模块,首先需要在 Node.js 文件中引入它:
const EventEmitter = require('events');
EventEmitter
类EventEmitter
类是 Node.js 事件模块的核心。它用于创建和处理自定义事件。每个 EventEmitter
实例都可以注册多个事件和相应的事件处理函数(监听器)。
要创建一个新的 EventEmitter
实例,你可以使用 new
关键字:
const myEmitter = new EventEmitter();
EventEmitter
的方法EventEmitter
类提供了多种方法来操作事件和监听器:
emitter.on(eventName, listener)
为指定事件注册一个监听器。每次触发事件时都会调用此监听器。
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {
console.log('An event occurred!');
});
myEmitter.emit('event'); // 输出: An event occurred!
emitter.once(eventName, listener)
为指定事件注册一个一次性监听器。事件最多触发一次,触发后立即解除绑定。
const myEmitter = new EventEmitter();
myEmitter.once('event', () => {
console.log('This will only run once');
});
myEmitter.emit('event'); // 输出: This will only run once
myEmitter.emit('event'); // 不会输出任何内容
emitter.emit(eventName[, ...args])
触发指定事件,并传递参数给监听器。
const myEmitter = new EventEmitter();
myEmitter.on('eventWithArgs', (a, b) => {
console.log(a, b);
});
myEmitter.emit('eventWithArgs', 'arg1', 'arg2'); // 输出: arg1 arg2
emitter.off(eventName, listener)
(Node.js 10+)
移除指定事件的某个监听器,listener
必须是原来添加时使用的函数。
const myEmitter = new EventEmitter();
function log() {
console.log('Event happened!');
}
myEmitter.on('event', log);
myEmitter.off('event', log); // 移除监听器
myEmitter.emit('event'); // 不会输出任何内容
emitter.removeListener(eventName, listener)
removeListener()
是 off()
方法的别名。
const myEmitter = new EventEmitter();
function log() {
console.log('Event happened!');
}
myEmitter.on('event', log);
myEmitter.removeListener('event', log); // 移除监听器
myEmitter.emit('event'); // 不会输出任何内容
emitter.removeAllListeners([eventName])
移除指定事件的所有监听器,或者移除所有事件的所有监听器。
const myEmitter = new EventEmitter();
myEmitter.on('event', () => console.log('Listener 1'));
myEmitter.on('event', () => console.log('Listener 2'));
myEmitter.removeAllListeners('event');
myEmitter.emit('event'); // 不会输出任何内容
emitter.listeners(eventName)
返回指定事件的监听器数组。
const myEmitter = new EventEmitter();
function listener1() {}
function listener2() {}
myEmitter.on('event', listener1);
myEmitter.on('event', listener2);
console.log(myEmitter.listeners('event')); // 输出: [ [Function: listener1], [Function: listener2] ]
emitter.listenerCount(eventName)
返回指定事件的监听器数量。
const myEmitter = new EventEmitter();
myEmitter.on('event', () => {});
myEmitter.on('event', () => {});
console.log(myEmitter.listenerCount('event')); // 输出: 2
emitter.setMaxListeners(n)
默认情况下,EventEmitter
实例最多可以注册 10 个监听器。当超过这个限制时,会输出警告。使用 setMaxListeners
可以更改监听器的数量限制。
const myEmitter = new EventEmitter();
myEmitter.setMaxListeners(20);
emitter.getMaxListeners()
返回当前的监听器最大数量。
const myEmitter = new EventEmitter();
console.log(myEmitter.getMaxListeners()); // 输出: 10 (默认值)
EventEmitter
的事件EventEmitter
实例也会发出一些特定事件:
newListener
当添加新的监听器时触发。新监听器在添加之前触发。
const myEmitter = new EventEmitter();
myEmitter.on('newListener', (event, listener) => {
console.log(`Adding listener to ${event} event.`);
});
myEmitter.on('event', () => {});
// 输出: Adding listener to event event.
removeListener
当移除监听器时触发。监听器在被移除后触发。
const myEmitter = new EventEmitter();
function listener() {
console.log('Listener executed');
}
myEmitter.on('removeListener', (event, listener) => {
console.log(`Removing listener from ${event} event.`);
});
myEmitter.on('event', listener);
myEmitter.removeListener('event', listener);
// 输出: Removing listener from event event.
在 Node.js 中,事件驱动架构通常用于异步操作。处理错误事件对于保证应用程序的健壮性非常重要。如果 EventEmitter
实例发出 error
事件且没有相应的监听器,Node.js 将会抛出一个错误并退出程序。
const myEmitter = new EventEmitter();
// 添加错误事件的监听器
myEmitter.on('error', (err) => {
console.error('An error occurred:', err.message);
});
// 触发错误事件
myEmitter.emit('error', new Error('Something went wrong!'));
在实际应用中,可以创建自定义类继承 EventEmitter
,从而在类中使用事件功能。
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('Event fired!');
});
myEmitter.emit('event'); // 输出: Event fired!
EventEmitter
是 Node.js 事件驱动架构的核心,通过它可以轻松地处理异步事件流。掌握 EventEmitter
的方法和事件,有助于开发更高效、响应更灵敏的 Node.js 应用程序。使用事件驱动编程模式可以帮助你更好地处理异步操作,提高代码的可读性和维护性。