V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX  ›  程序员

求助 js 一个好的订阅模式/事件监听器 怎么写比较好

  •  
  •   rizon ·
    othorizon · 2019-06-25 22:05:26 +08:00 · 1168 次点击
    这是一个创建于 2012 天前的主题,其中的信息可能已经有所发展或是发生改变。

    麻烦帮忙看下这个写的有什么可以优化的地方吗?

    目前我比较在意的两个问题:

    1. emit 中调用回调函数时,是不是应该 try catch,防止异常导致全部失败?
      ~~ 2. 是不是应该换成异步的?而不是这样阻塞的一个个去回调? ~~ 划掉,好像理解的不对,函数是不会阻塞的吧?虽然是循环一个个触发 的,但是默认是不会等函数执行结束是吧?
    class AppEvent {
    
        constructor() {
            this.EventType = {
                Type1: "Type1",
                Type2: "Type2",
            };
            let self = this;
            self.app_events = {};
    
            self.emit = function (eventName, data) {
                let callbackArr = self.app_events[eventName];
                if (callbackArr && callbackArr.length) {
                    for (let i = 0; i < callbackArr.length; i++) {
                        if (callbackArr[i]) {
                            callbackArr[i](data);
                        }
                    }
                }
            };
            self.on = function (eventName, callback) {
                if (!self.app_events[eventName]) {
                    self.app_events[eventName] = []
                }
                self.app_events[eventName].push(callback)
            };
    
            self.off = function (eventName, callback) {
                let callbackArr = self.app_events[eventName];
                if (callbackArr && callbackArr.length) {
                    let index = callbackArr.indexOf(callback);
                    callbackArr.splice(index, 1);
                }
            }
        }
    }
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2762 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:50 · PVG 17:50 · LAX 01:50 · JFK 04:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.