Node.js —— EventEmitter

在Node.js中,EventEmitter是一个非常重要的类,它提供了一种用于处理事件的基础框架。事件处理是Node.js中异步操作的重要组成部分,而EventEmitter则是实现事件驱动逻辑的关键。

EventEmitter的作用

  1. 事件管理:EventEmitter提供了一种统一的事件管理机制,可以将不同的事件和监听器进行绑定和解绑,确保事件和监听器之间的松散耦合。
  2. 跨组件通信:通过EventEmitter,不同组件之间可以进行通信。当一个组件需要通知其他组件时,可以触发相应的事件,并传递必要的数据。
  3. 异步操作处理:EventEmitter可以用于处理异步操作,确保异步操作完成后的回调逻辑的正确执行。
  4. 插件系统:通过EventEmitter,可以实现插件系统的扩展和升级。插件可以通过注册和触发事件与主程序进行通信,实现功能的扩展和升级。

EventEmitter的用法

  • 创建EventEmitter实例:首先,需要使用require()函数导入events模块,并使用new关键字创建一个EventEmitter实例。
javascript 复制代码
const EventEmitter = require('events');  
const eventEmitter = new EventEmitter();
  • 注册事件监听器:使用EventEmitter实例的on()方法或addListener()方法来注册事件监听器。这两个方法都需要两个参数,第一个参数是事件名称,第二个参数是事件处理函数。
javascript 复制代码
eventEmitter.on('event', function(arg1, arg2) {  
  console.log('Event triggered:', arg1, arg2);  
});
  • 触发事件:使用EventEmitter实例的emit()方法来触发事件。这个方法需要一个或多个参数,这些参数会传递给事件处理函数。

    javascript 复制代码
    eventEmitter.emit('event', 'Hello', 'World');
  • 移除事件监听器:如果需要移除某个事件的所有监听器,可以使用EventEmitter实例的removeAllListeners()方法。如果需要移除某个事件的某个特定监听器,可以使用EventEmitter实例的removeListener()方法。

    javascript 复制代码
    eventEmitter.removeAllListeners('event');  
    eventEmitter.removeListener('event', myFunction);
  • 监听器的默认限制:在默认情况下,如果添加的监听器超过10个,Node.js会输出警告信息。可以使用setMaxListeners()方法来提高监听器的默认限制数量。

    javascript 复制代码
    eventEmitter.setMaxListeners(20);

EventEmitter 的属性介绍

方法
序号 方法 描述
1 addListener(event, listener) 为指定事件添加一个监听器到监听器数组的尾部。
2 on(event, listener) 为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。 eventEmitter.on('connection', function (stream) {   console.log('someone connected!'); });
3 once(event, listener) 为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。 eventEmitter.once('connection', function (stream) {   console.log('Ah, we have our first user!'); });
4 removeListener(event, listener) 移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。 它接受两个参数,第一个是事件名称,第二个是回调函数名称。 var callback = function(stream) { console.log('someone connected!'); }; eventEmitter .on('connection', callback); // ... eventEmitter .removeListener('connection', callback);
5 removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。 eventEmitter
6 setMaxListeners(n) 默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于改变监听器的默认限制的数量。 eventEmitter
7 listeners(event) 返回指定事件的监听器数组。 eventEmitter
8 emit(event, [arg1], [arg2], [...]) 按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false。 eventEmitter
类方法
序号 方法 描述
1 listenerCount(emitter, event) 返回指定事件的监听器数量。
事件
序号 事件 描述
1 newListener * event - 字符串,事件名称 * listener - 处理事件函数 该事件在添加新监听器时被触发。
2 removeListener * event - 字符串,事件名称 * listener - 处理事件函数 从指定监听器数组中删除一个监听器。需要注意的是,此操作将会改变处于被删监听器之后的那些监听器的索引。

Event Emitter的使用场景和作用

  1. 异步操作处理:在Node.js中,许多操作都是异步的,例如文件读取、网络请求等。通过使用EventEmitter,可以方便地处理这些异步操作的结果和回调逻辑。
  2. 插件系统:插件系统是许多应用程序的重要组成部分。通过使用EventEmitter,可以轻松地实现插件系统的扩展和升级功能,使应用程序更加灵活和可扩展。
  3. 多模块通信:在大型应用程序中,不同模块之间需要进行通信和交互。通过使用EventEmitter,可以方便地实现不同模块之间的通信和数据传递。
  4. 错误处理:在Node.js中,错误处理是非常重要的一个环节。通过使用EventEmitter,可以方便地捕获和处理错误事件,避免程序崩溃或产生不可预料的行为。
  5. 自定义事件类型:除了标准的事件类型外,开发人员还可以自定义事件类型。通过使用EventEmitter,可以轻松地定义

EventEmitter的核心方法

EventEmitter的核心方法是emit(),它用于触发事件并传递参数给事件处理函数。以下是一个使用EventEmitter的简单示例👇

javascript 复制代码
const EventEmitter = require('events');  
  
class MyEmitter extends EventEmitter {}  
  
const myEmitter = new MyEmitter();  
  
myEmitter.on('event', (arg1, arg2) => {  
  console.log('Event triggered:', arg1, arg2);  
});  
  
myEmitter.emit('event', 'Hello', 'World');

在这个示例中,首先导入EventEmitter模块,然后创建一个名为MyEmitter的类,它继承了EventEmitter。接下来,创建一个MyEmitter实例myEmitter,并使用on()方法注册一个事件监听器来处理名为'event'的事件。最后,使用emit()方法触发'event'事件,并传递两个参数'Hello'和'World'给事件处理函数。事件处理函数会接收到这两个参数,并打印出相应的消息。

相关推荐
在下千玦17 小时前
#管理Node.js的多个版本
node.js
你的人类朋友18 小时前
MQTT协议是用来做什么的?此协议常用的概念有哪些?
javascript·后端·node.js
还是鼠鼠21 小时前
Node.js中间件的5个注意事项
javascript·vscode·中间件·node.js·json·express
南通DXZ1 天前
Win7下安装高版本node.js 16.3.0 以及webpack插件的构建
前端·webpack·node.js
你的人类朋友1 天前
浅谈Object.prototype.hasOwnProperty.call(a, b)
javascript·后端·node.js
前端太佬1 天前
暂时性死区(Temporal Dead Zone, TDZ)
前端·javascript·node.js
Mintopia1 天前
Node.js 中 http.createServer API 详解
前端·javascript·node.js
你的人类朋友1 天前
CommonJS模块化规范
javascript·后端·node.js
Mintopia2 天前
Node.js 中 fs.readFile API 的使用详解
前端·javascript·node.js
咖啡教室2 天前
nodejs开发后端服务详细学习笔记
后端·node.js