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

使用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');

你可能感兴趣的:(node.js,javascript,开发语言,ecmascript)