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

相关文章

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Redis实现延迟任务的三种方法详解

《Redis实现延迟任务的三种方法详解》延迟任务(DelayedTask)是指在未来的某个时间点,执行相应的任务,本文为大家整理了三种常见的实现方法,感兴趣的小伙伴可以参考一下... 目录1.前言2.Redis如何实现延迟任务3.代码实现3.1. 过期键通知事件实现3.2. 使用ZSet实现延迟任务3.3

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python