Node.js EventEmitter详解

2024-02-02 06:12
文章标签 详解 js node eventemitter

本文主要是介绍Node.js EventEmitter详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、EventEmitter介绍
  • 二、EventEmitter方法
  • 三、EventEmitter类方法
  • 四、EventEmitter事件
  • 五、EventEmitter的error 事件
  • 六、node介绍
  • 七、相关链接

一、EventEmitter介绍

Node.js 的 EventEmitter 是一个核心模块,用于处理事件驱动的编程。它提供了一个事件发射器类,可以在其上注册事件监听器,并在特定事件发生时触发这些监听器。

下面是 EventEmitter 的主要概念和用法:

  1. 事件:事件是由 EventEmitter 类表示的字符串或数字。你可以在任何时候触发这些事件。
  2. 监听器:监听器是一个函数,当特定事件被触发时,它将被调用。你可以使用 on 方法添加监听器到特定事件。
  3. 触发事件:使用 emit 方法可以触发一个事件,所有注册到该事件的监听器都将被调用。
  4. 移除监听器:如果你不再需要一个监听器,可以使用 off 方法将其从事件中移除。
  5. 一次性监听器:使用 once 方法可以添加一个只触发一次的监听器。
  6. 错误事件:EventEmitter 定义了一个特殊的 error 事件,当任何其他事件失败时,都会触发该事件。

下面是一个简单的示例,演示如何使用 EventEmitter:

const EventEmitter = require('events');class MyEmitter extends EventEmitter {}const myEmitter = new MyEmitter();// 添加监听器
myEmitter.on('event', () => {console.log('Event has been triggered!');
});// 触发事件
myEmitter.emit('event'); // 输出: "Event has been triggered!"

在这个示例中,我们创建了一个继承自 EventEmitter 的自定义类 MyEmitter,并创建了一个 myEmitter 实例。然后,我们使用 on 方法添加了一个监听器到 event 事件,并使用 emit 方法触发了该事件。监听器函数将输出一条消息,表示事件已被触发。

二、EventEmitter方法

  1. addListener(event, listener)为指定事件添加一个监听器到监听器数组的尾部。
  2. on(event, listener)为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
server.on('connection', function (stream) {console.log('someone connected!');
});
  1. once(event, listener)为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器。
server.once('connection', function (stream) {console.log('Ah, we have our first user!');
});
  1. removeListener(event, listener)移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。

它接受两个参数,第一个是事件名称,第二个是回调函数名称。

var callback = function(stream) {console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
  1. removeAllListeners([event])移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。
  2. setMaxListeners(n)默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于改变监听器的默认限制的数量。
  3. listeners(event)返回指定事件的监听器数组。
  4. emit(event, [arg1], [arg2], […])按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false。

三、EventEmitter类方法

listenerCount(emitter, event)返回指定事件的监听器数量。

events.EventEmitter.listenerCount(emitter, eventName) //已废弃,不推荐
events.emitter.listenerCount(eventName) //推荐

四、EventEmitter事件

  1. newListener该事件在添加新监听器时被触发。
  • event - 字符串,事件名称
  • listener - 处理事件函数
  1. removeListener从指定监听器数组中删除一个监听器。需要注意的是,此操作将会改变处于被删监听器之后的那些监听器的索引
  • event - 字符串,事件名称
  • listener - 处理事件函数

五、EventEmitter的error 事件

EventEmitter 定义了一个特殊的事件 error,它包含了错误的语义,我们在遇到 异常的时候通常会触发 error 事件。

当 error 被触发时,EventEmitter 规定如果没有响 应的监听器,Node.js 会把它当作异常,退出程序并输出错误信息。

我们一般要为会触发 error 事件的对象设置监听器,避免遇到错误后整个程序崩溃。例如:

var events = require('events'); 
var emitter = new events.EventEmitter(); 
emitter.emit('error'); 

六、node介绍

Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于构建高性能的网络应用程序。它采用事件驱动、非阻塞I/O模型,使得程序可以以高效地方式处理并发请求。

Node.js的特点包括:

  1. 单线程:Node.js采用单线程模型,使用事件循环来处理并发请求。这意味着它可以高效地处理大量的并发请求,而不会因为线程切换而产生开销。
  2. 非阻塞I/O:Node.js使用非阻塞I/O模型,可以在进行I/O操作时继续处理其他请求,而不需要等待I/O操作完成。这使得Node.js非常适合处理高并发的网络应用程序。
  3. 异步编程:Node.js采用异步编程模式,可以使用回调函数来处理异步操作的结果。这使得开发者可以编写简洁、可读性强的代码,同时可以更好地利用系统资源。
  4. 轻量级:Node.js是一个轻量级的运行环境,所需的资源较少,并且可以快速启动。这使得它非常适合部署在云服务器等资源有限的环境中。
  5. 前后端一体化:Node.js可以用于开发前端和后端的代码,使得前后端可以共享相同的语言和模块。这样可以简化开发流程,并提高开发效率。

Node.js的应用场景包括:

  1. Web应用程序:Node.js可以用于开发高性能的Web应用程序,如实时聊天应用、实时协作工具等。
  2. RESTful API服务:Node.js可以用于开发高性能的API服务,提供数据和功能的接口。
  3. 实时数据应用程序:Node.js可以用于开发实时数据应用程序,如实时数据分析、实时监控等。
  4. 游戏后台服务器:Node.js可以用于开发游戏后台服务器,处理大量的并发请求。

Node.js是一个功能强大、高性能的JavaScript运行环境,适用于开发各种类型的网络应用程序。它的优势在于高并发处理能力、高效的I/O操作、简洁的异步编程模型,以及与前端一体化等特点。

七、相关链接

  1. npm版本
  2. node文档
  3. node教程
  4. node历史版本
  5. node介绍
  6. node文件系统
  7. node创建应用

这篇关于Node.js EventEmitter详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669699

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

LabVIEW FIFO详解

在LabVIEW的FPGA开发中,FIFO(先入先出队列)是常用的数据传输机制。通过配置FIFO的属性,工程师可以在FPGA和主机之间,或不同FPGA VIs之间进行高效的数据传输。根据具体需求,FIFO有多种类型与实现方式,包括目标范围内FIFO(Target-Scoped)、DMA FIFO以及点对点流(Peer-to-Peer)。 FIFO类型 **目标范围FIFO(Target-Sc