使用EventEmitter构建基础的生命周期模型

2023-10-27

使用EventEmitter构建基础的生命周期模型,比如onCreate onUpdate onDestroy,分别在每个阶段console.log一条消息。

比如说,我们构建一个便签管理的EventEmitter

在onCreate时初始化一个library数组

通过调用函数向library中的object Array添加条目,这个条目包含:
{
‘id’: ‘’
‘content’:‘’,
‘color’:‘’,
‘create’:‘’
}

const EventEmitter = require('events');
const uuid = require('uuid');

class NoteManager extends EventEmitter {
  constructor() {
    super();
    this.library = [];
    this.on('onCreate', this.onCreate);
    this.on('onUpdate', this.onUpdate);
    this.on('onDestroy', this.onDestroy);
  }

  onCreate = (content, color) => {
    const note = {
      id: uuid.v4(),
      content,
      color,
      create: new Date(),
    };
    this.library.push(note);
    console.log(`Note ${note.id} created`);
  };

  onUpdate = (id, content, color) => {
    const note = this.library.find((n) => n.id === id);
    if (!note) {
      console.error(`Note ${id} not found`);
      return;
    }
    if (content) {
      note.content = content;
    }
    if (color) {
      note.color = color;
    }
    console.log(`Note ${id} updated`);
  };

  onDestroy = (id) => {
    const index = this.library.findIndex((n) => n.id === id);
    if (index < 0) {
      console.error(`Note ${id} not found`);
      return;
    }
    this.library.splice(index, 1);
    console.log(`Note ${id} destroyed`);
  };
}

const manager = new NoteManager();

manager.emit('onCreate', 'note 1', 'yellow');
manager.emit('onCreate', 'note 2', 'green');
manager.emit('onUpdate', manager.library[0].id, 'updated note 1');
manager.emit('onDestroy', manager.library[1].id);

uuid的模块需要安装:

npm install uuid

uuid的模块的作用是什么?

uuid是一个Node.js的第三方模块,用于生成唯一标识符,也就是通常所说的UUID(Universally Unique Identifier)。

在应用程序中,生成UUID的常见场景是为每个新的实体或对象创建一个唯一的ID。UUID是一种具有全球唯一性的标识符,其值在所有计算机上都应该是唯一的,可以确保在分布式系统中使用时不会发生ID冲突。它可以用作数据库表的主键,或者作为文件名、URL、消息ID等等的唯一标识符。

在Node.js中,可以使用uuid模块轻松地生成UUID,而不必编写自己的生成算法。可以使用v1、v3、v4、v5这四个版本的UUID,每个版本都有不同的生成方式和用途。

另一个版本:
使用EventEmitter构建基础的生命周期模型,比如onCreate onUpdate onDestroy,分别在每个阶段console.log一条消息。
比如说,我们构建一个便签管理的EventEmitter
在onCreate时初始化一个library数组
通过调用函数向library中的object Array添加条目,这个条目包含:
{
‘id’: ‘’
‘content’:‘’,
‘color’:‘’,
‘create’:‘’
}
通过sticker.add(content,color)向维护的object Array添加条目,该函数会将一个上述object添加到library中,其中content和color需要提供,否则默认值为’‘和’default’。create为当前时间戳,id为随机生成的16为字母数字字符串。
并且这个函数会触发onUpdate,功能是console.log打印出sticker所有的内容.
在退出时触发onDestroy,输出library中所有stickers中的总字数。

const { EventEmitter } = require('events');
const uuid = require('uuid');

class StickerManager extends EventEmitter {
  constructor() {
    super();
    this.library = [];
    this.on('create', this.onCreate);
    this.on('update', this.onUpdate);
    this.on('destroy', this.onDestroy);
  }

  onCreate() {
    this.library = [];
    console.log('StickerManager created');
  }

  add(content = '', color = 'default') {
    const sticker = {
      id: uuid.v4(),
      content,
      color,
      create: new Date().getTime(),
    };
    this.library.push(sticker);
    this.emit('update', this.library);
  }

  onUpdate(stickers) {
    console.log(`StickerManager updated with ${stickers.length} stickers:`);
    console.log(stickers);
  }

  onDestroy() {
    const totalChars = this.library.reduce((total, sticker) => total + sticker.content.length, 0);
    console.log(`StickerManager destroyed, total characters: ${totalChars}`);
  }
}

const stickerManager = new StickerManager();

stickerManager.emit('create');
stickerManager.add('Buy milk', 'yellow');
stickerManager.add('Walk the dog');
stickerManager.emit('destroy');

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用EventEmitter构建基础的生命周期模型 的相关文章

随机推荐

  • Spring学习--IOC容器的初始化过程

    IOC容器初始化概述 IOC容器初始化是由refresh 方法来启动的 这个方法标志着IOC容器的正式启动 Spring将IOC容器启动的过程分开 并使用不同的模块来完成 如使用ResourceLoader BeanDefinition等模
  • 解决:"MySQL error code 145 Table was marked as crashed and should be repaired"的问题

    该错误指的是数据库的表损坏需要修复 我的数据库客户端使用的是Navicat 通过查看服务的错误日志我们可以知道具体是哪个表出现了问题 在Navicat上如果试图鼠标双击打开那个被损坏的表也会显示如标题所示的错误信息 MySQL error
  • Ubuntu安装软件时Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)的解决方案

    Ubuntu 19 04 在安装wireshark的时候 sudo apt get install wireshark后遇到报错如下 E Could not get lock var lib dpkg lock open 11 Resour
  • 运维基础知识

    一 简述运维流程 1 接手平台 管理资产 增删 设置平台对资产是扫描策略 2 每天按照规定的巡检周期对资产进行巡检 巡检过程中检测资产的目前状态做记录 查看是否有新增告警事件 将发现的新增告警事件按照规定输出详细的事件工单 工单内要求详细描
  • Error processing condition on org.springframework.cloud.commons.httpclient.HttpClientConfiguration

    背景 创建springboot项目后 导入nacos 配置中心和注册中心依赖后报错 springboot启动类无法正常启动 控制台异常如题 报错源码 java lang IllegalStateException Error process
  • Springboot数据库连接池报错的解决办法

    Springboot数据库连接池报错的解决办法 这个异常通常在Linux服务器上会发生 原因是Linux系统会主动断开一个长时间没有通信的连接 那么我们的问题就是 数据库连接池长时间处于间歇状态 导致Linux系统将其断开了 然后抛出了这个
  • 关于解决win10的 tencent qqmail plugin 卸载不了的问题

    问题出现场景 我也是偶然一次在搜索我电脑里面下载的程序时 发现有个叫做tencent qqmail plugin的程序怎么也删除不掉 经过的我不断的尝试 欸 我终于找到解决方法了 问题描述 我之前使用的方法的是在 设置 应用 应用程序 中卸
  • 在VMware里克隆出来的CentOSLinux。。 ifconfig...没有看到eth0.。然后重启网卡又报下面错误。

    原文地址 http www 51testing com html 90 360490 846295 html 故障现象 service network restart Shutting down loopback insterface OK
  • 流程图中的虚线含义_流程图图形符号标准含义简介

    流程图是我们工作中经常会用到的一种工具 形象直观 便于理解 直观地描述一个工作过程的具体步骤 流程图对准确了解事情是如何进行的 以及决定应如何改进过程极有帮助 这一方法可以用于整个企业 以便直观地跟踪和图解企业的运作方式 流程图中有很多图形
  • 数据挖掘初探(skleran)

    1 使用sklearn进行数据挖掘 1 1 数据挖掘的步骤 数据挖掘通常包括数据采集 数据分析 特征工程 训练模型 模型评估等步骤 我们使用sklearn进行虚线框内的工作 sklearn也可以进行文本特征提取 通过分析sklearn源码
  • RT-Thread记录(十一、I/O 设备模型之UART设备 — 源码解析)

    深入理解 RT Thread I O 设备模型 分析 UART设备源码 目录 前言 一 初识 UART 操作函数 应用程序 二 UART 的初始化 2 1 UART 设备初始化位置 2 2 UART 设备初始化函数分析 stm32 uart
  • 华为IP的考试费要好几千,想问一下这个证书的含金量怎么样?

    虽然华为认证HCIP考试只考笔试 题库稳 运气好的话刷题库就有可能会过 但是其实学的时候还是好好学的 要不然只为了考试而去背题 但是实际操作能力不行的话一样会被企业拒绝的 最重要的还是掌握华为认证HCIP的技能 证书只是找工作的一个敲门砖
  • 服务器系统这么做,服务器怎么做系统

    服务器怎么做系统 内容精选 换一换 无法直接从云备份控制台查看备份中的数据 您可以通过以下几种方式进行查看 云服务器备份使用云服务器备份创建镜像后 再使用镜像创建云服务器 登录云服务器 查看服务器中的数据 云硬盘备份使用云硬盘备份创建新的云
  • 算法题:完全二叉树的权值

    问题描述 给定一棵包含 N 个节点的完全二叉树 树上每个节点都有一个权值 按从 上到下 从左到右的顺序依次是 A1 A2 AN 如下图所示 现在要把相同深度的节点的权值加在一起 他想知道哪个深度的节点 权值之和最大 如果有多个深度的权值和同
  • 代理模式,以及Java的动态代理

    定义 为其他对象提供一种代理以控制对这个对象的访问 可以提供额外不同的操作 UML类图 Subject类 定义了RealSubject和Proxy的共用接口 这样就在任何使用RealSubject的地方都可以使用Proxy RealSubj
  • UNIX环境高级编程 学习笔记 第十八章 终端I/O

    20世纪70年代后期 系统 UNIX System III 发展出一套不同于V7 Version 7 Unix 的终端IO例程 使得UNIX终端IO处理分立为两种不同风格 一种是系统 风格 它延续到了System V 另一种是V7风格 它成
  • 暴力破解Windows、Linux登录密码

    Windows密码破解 使用hydra离线破解windows密码 使用getpass内存提取windows用户密码 使用quarkpwdump导出windows用户密码hash值 Linux密码破解 使用hydra离线破解linux密码 将
  • idea启动java项目卡住问题

    当遇到 Method breakpoints may dramatically slow down debugging时 这时有可能可以进行下面步骤解决 Ctrl Shift F8 打开Breakpoints面板 然后可以测试是否可行
  • 记录好项目D21

    记录好项目 你好呀 这里是我专门记录一下从某些地方收集起来的项目 对项目修改 进行添砖加瓦 变成自己的闪亮项目 修修补补也可以成为毕设哦 本次的项目是个基于Springboot的教务管理系统 学生管理系统 课表查询系统 一 系统介绍 本项目
  • 使用EventEmitter构建基础的生命周期模型

    使用EventEmitter构建基础的生命周期模型 比如onCreate onUpdate onDestroy 分别在每个阶段console log一条消息 比如说 我们构建一个便签管理的EventEmitter 在onCreate时初始化