发布观察者模式使用场景记录

1. 全局共享的数组请求

问题

当遇到全局共享的字典list挂载到vuex或者pinia等全局状态中供全局组件使用,但字典接口后端设置了token请求,如果是在没token进入时候就会遇到这样的情况

在App.vue组件中

js 复制代码
<template>
  <div id="app">
    <router-view />
  </div>
</template>

<script>

export default {
  name: "App",
  created() {
    if(getToken()){
        this.$store.dispatch("getXXXList");
        this.$store.dispatch("getXXXList");
    }else{
        observer.add(getXXXList,this.$store)
    }
  },
  metaInfo() {
    
  },
};
</script>
<style scoped>

</style>

这样组件出时候加载就会发起两个请求,但是因为没有token弹出以上提示。

解决思路

可以使用发布订阅者模式,初始化时收集该类型的请求,等到有token时候(可以在登陆时候触发,也可以监听某个参数触发)执行该收集的列表。可以直接使用全局状态管理实现。

js 复制代码
//观察器

class Observer {
  constructor() {
    this.observers = [];
    this.store = null;
  }

  add(observer, store) {
    this.observers.push(observer);
    this.store = store;
  }
  notify() {
    if (!this.store) {
      console.error("Observer: store is not set");
      return;
    }
    console.log(this.store);

    this.observers.forEach((item) => {
      this.store.dispatch(item);
    });
    this.observers = [];
  }
}
const observer = new Observer();
export default observer;

最后在登陆时候notify就可以。这是单一场景下,如果涉及到其他 的主题需要添加分类

相关推荐
磊 子1 小时前
C++设计模式
javascript·c++·设计模式
许彰午5 小时前
34_Java设计模式之单例模式
java·单例模式·设计模式
石一峰6991 天前
C 语言函数设计模式实战经验
c语言·开发语言·设计模式
qq_297574671 天前
设计模式系列文章(基础篇第22篇):访问者模式——分离数据结构与操作,实现灵活扩展
数据结构·设计模式·访问者模式
刀法如飞1 天前
领域驱动 vs 本体驱动:DDD 代码建模与 Ontology 语义建模的对比分析
设计模式·架构设计·领域驱动
我爱cope2 天前
【Agent智能体26 | 多智能体-多智能体工作流】
人工智能·设计模式·语言模型·职场和发展
咖啡八杯2 天前
【无标题】
java·后端·设计模式
折哥的程序人生 · 物流技术专研2 天前
Java 23 种设计模式:从踩坑到精通 | 适配器模式 —— 让不兼容的接口也能一起工作
java·设计模式·面试·适配器模式·单一职责原则
布朗克1682 天前
33 设计模式精讲
java·单例模式·设计模式