了解 Node.js 的 EventEmitter:事件驱动编程的核心

97 阅读2分钟

了解 Node.js 的 EventEmitter:事件驱动编程的核心

在 Node.js 中,EventEmitter 是事件驱动编程的核心类之一。它提供了一种机制,可以让我们在应用中实现事件的触发和监听,帮助我们解耦不同的模块,使得代码更加清晰和灵活。本文将简要介绍 EventEmitter 类的基本概念和用法。

什么是 EventEmitter?

EventEmitter 是 Node.js 内建的一个类,用于处理事件及事件监听。在 Node.js 中,许多模块(例如文件操作、HTTP 请求等)都使用 EventEmitter 来触发和监听事件。通过这种机制,我们能够在某个事件发生时执行特定的回调函数。

如何使用 EventEmitter?

1. 引入 EventEmitter

首先,你需要引入 events 模块,才能使用 EventEmitter 类。

const EventEmitter = require('events');

2. 创建 EventEmitter 实例

接下来,我们可以创建一个 EventEmitter 的实例,通过它来管理事件和监听器。

const eventEmitter = new EventEmitter();

3. 监听事件

我们可以使用 on ,once或者addListener方法来监听某个事件。当事件被触发时,指定的回调函数就会被执行。

注:事件添加是放入数组的,所以如果同一个事件名,添加多次后不是覆盖之前的事件,而是在数组中有多个回调函数

eventEmitter.on('greet', () => {
  console.log('Hello, Node.js!');
});

4. 触发事件

使用 emit 方法触发事件。当事件被触发时,所有监听这个事件的回调函数都会被执行。

eventEmitter.emit('greet'); // 输出:Hello, Node.js!

5. 移除事件监听器

如果不再需要监听某个事件,可以使用 removeListeneroff或者removeAllListeners 方法移除监听器。

const greetListener = () => {
  console.log('Hello, Node.js!');
};

eventEmitter.on('greet', greetListener);
eventEmitter.removeListener('greet', greetListener); // 移除监听器

示例:创建一个简单的事件系统

以下是一个简单的示例,展示了如何使用 EventEmitter 来模拟一个任务的完成事件。

const EventEmitter = require('events');

class Task extends EventEmitter {
  constructor(name) {
    super();
    this.name = name;
  }

  start() {
    console.log(`Task "${this.name}" started.`);
    setTimeout(() => {
      this.emit('completed', this.name);
    }, 2000); // 模拟任务执行 2 秒后完成
  }
}

const task = new Task('Download File');

task.on('completed', (taskName) => {
  console.log(`Task "${taskName}" completed!`);
});

task.start(); // 启动任务