📅  最后修改于: 2023-12-03 14:41:01.982000             🧑  作者: Mango
在 Node.js 中,存在两种基本的事件机制,分别是 EventEmitter 和 NodeEventTarget。两者都可用于处理异步事件,但在使用方式和应用场景上有一些区别。
EventEmitter 是 Node.js 的核心模块之一,可以用于处理异步事件。它是一个 JavaScript 类,它提供了一个事件触发器,可以用它来触发事件,并监听事件的触发。在 Node.js 中,很多模块都是基于 EventEmitter 实现的,比如 http、fs、net 等模块,在使用这些模块时,都需要通过 EventEmitter 来注册和处理相应的事件。
引入 events
模块。
const EventEmitter = require('events');
创建 EventEmitter 实例。
const eventEmitter = new EventEmitter();
注册事件和监听器。
eventEmitter.on('eventName', listener);
触发事件。
eventEmitter.emit('eventName');
EventEmitter 适用于如下场景:
NodeEventTarget 是在 Node.js v15.0.0 以后新增的 API,它也实现了事件机制,但是与 EventEmitter 不同的是,它是一个基于 Web 标准的事件处理器,实现了浏览器中的 EventTarget API,将 Node.js 中的事件机制与 Web 标准进行整合。
引入 NodeEventTarget
模块。
const { NodeEventTarget } = require('event-target-shim');
创建 NodeEventTarget 实例。
const nodeEventTarget = new NodeEventTarget();
注册事件和监听器。
nodeEventTarget.addEventListener('eventName', listener);
触发事件。
nodeEventTarget.dispatchEvent(new CustomEvent('eventName'));
NodeEventTarget 适用于如下场景:
EventEmitter 和 NodeEventTarget 都是用于处理异步事件的机制,但是在使用方式和应用场景上有一些不同。EventEmitter 是 Node.js 的核心模块之一,适用于处理少量的异步事件。NodeEventTarget 是在 Node.js v15.0.0 以后新增的 API,实现了浏览器中的 EventTarget API,适用于处理大量的异步事件,需要更加高效地管理事件流。