ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[Snippet] - EventEmitter

2022-01-20 22:04:36  阅读:183  来源: 互联网

标签:off param event Snippet callback EventEmitter type events


同步链接: https://www.shanejix.com/posts/[Snippet] - EventEmitter/

API

-subscribe / addListener / on -
  publish / emit -
  unsubscribe / removeListener / off;

EventEmitter

class EventEmitter {
  constructor() {
    /**
     * 订阅中心
     *
     * {"type":[callback1,callback2,...]}
     *
     */
    this.events = {};
  }

  /**
   * subscribe event
   * @param {*} type
   * @param {*} callback
   */
  on(type, callback) {
    if (this.events[type]) {
      // 当前 type 类型已经订阅,则在数组后追加
      this.events[type].push(callback);
    } else {
      // 当前 type 类型未订阅,则初始化数组
      this.events[type] = [callback];
    }
  }

  /**
   * subscribe event
   * @param {*} type
   * @param {*} callback
   */
  subscribe(type, callback) {
    this.on(type, callback);
  }

  /**
   * subscribe event
   * @param {'*'} type
   * @param {*} callback
   */
  addListener(type, callback) {
    this.on(type, callback);
  }

  /**
   * emit event
   * @param {*} type
   */
  emit(type) {
    // 通知执行当前 type 类型的所有回调函数
    if (this.events[type] && this.events[type].length) {
      this.events[type].forEach((callback) => {
        callback();
      });
    }
  }

  /**
   * emit event
   * @param {*} type
   */
  publish(type) {
    this.emit(type);
  }

  /**
   * off event
   * @param {*} type
   * @param {*} callback
   */
  off(type, callback) {
    // 取消订阅当前 type 类型的 callback 回调
    if (this.events[type] && this.events[type].length) {
      this.events[type] = this.events[type].filter((cb) => cb !== callback);
    }
  }

  /**
   * off event
   * @param {*} type
   * @param {*} callback
   */
  unsubscribe(type, callback) {
    this.off(type, callback);
  }

  /**
   * off event
   * @param {*} type
   * @param {*} callback
   */
  removeListener(type, callback) {
    this.off(type, callback);
  }
}

usage

const eventEmitter = new EventEmitter();

eventEmitter.on("type", () => {
  console.log("type executed");
});

eventEmitter.emit("type");

作者:shanejix
出处:https://www.shanejix.com/posts/[Snippet] - EventEmitter/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
声明:转载请注明出处!

标签:off,param,event,Snippet,callback,EventEmitter,type,events
来源: https://www.cnblogs.com/shanejix/p/15828253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有