📅  最后修改于: 2023-12-03 15:17:56.800000             🧑  作者: Mango
在 Node.js 中,事件驱动编程是一种常见的编程范式,而事件发射器是实现事件驱动编程的重要组件之一。事件发射器(EventEmitter)是 Node.js 中的一个核心模块,用于处理事件和触发事件。
要使用事件发射器,需要先创建一个 EventEmitter 实例:
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
一旦创建了 EventEmitter 实例,就可以绑定事件监听器了。每个事件都有一个字符串类型的名称和一个回调函数。当事件被触发时,绑定到该事件的回调函数将被调用。
myEmitter.on('myEvent', (arg1, arg2, arg3) => {
console.log(`myEvent was triggered with args: ${arg1}, ${arg2}, ${arg3}`);
});
要触发一个事件,可以调用 EventEmitter 实例的 emit() 方法,并指定事件名称以及传递给回调函数的参数:
myEmitter.emit('myEvent', 'foo', 'bar', 'baz');
// Output: myEvent was triggered with args: foo, bar, baz
在某些情况下,你可能只想要监听一次某个事件。Node.js 的 EventEmitter 提供了一种方法,即使用 once() 方法,它会在首次触发事件后自动为事件取消注册。
myEmitter.once('myEvent', (arg1, arg2, arg3) => {
console.log(`myEvent was triggered with args: ${arg1}, ${arg2}, ${arg3}`);
});
如果要移除绑定到事件的监听器,可以使用 removeListener() 方法。
const callback = (arg1, arg2, arg3) => {
console.log(`myEvent was triggered with args: ${arg1}, ${arg2}, ${arg3}`);
};
myEmitter.on('myEvent', callback);
// ...
myEmitter.removeListener('myEvent', callback);
我们也可以通过继承 EventEmitter 来创建自己的事件发射器类:
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('myEvent', () => {
console.log('myEvent was triggered');
});
myEmitter.emit('myEvent');
// Output: myEvent was triggered
在这个示例中,我们创建了一个类 MyEmitter,它继承了 EventEmitter 类,在该类中定义了一个 myEvent 事件和对应的回调函数。我们还实例化了 MyEmitter 类,并使用它来触发 myEvent 事件。