📜  Node.js 事件发射器(1)

📅  最后修改于: 2023-12-03 15:17:56.800000             🧑  作者: Mango

Node.js 事件发射器

在 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

我们也可以通过继承 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 事件。