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

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就可以。这是单一场景下,如果涉及到其他 的主题需要添加分类

相关推荐
kisshyshy16 小时前
从无崖子到OpenAI:大模型间的“传功”,动了谁的奶酪?
人工智能·深度学习·设计模式
某不知名網友20 小时前
C++ 六大常用设计模式详解(单例、工厂、策略、状态、观察者、代理)
开发语言·c++·设计模式
咖啡八杯20 小时前
GoF设计模式——责任链模式
设计模式·面试·架构
大辉狼_音频架构2 天前
Vol.01 高频设计模式
设计模式
我登哥MVP2 天前
走进 Gang of Four 设计模式:代理模式
设计模式·代理模式
我登哥MVP2 天前
走进 Gang of Four 设计模式:外观模式
java·设计模式·外观模式
ttod_qzstudio2 天前
【软考设计模式】备忘录模式:对象状态的捕获与无损恢复精讲
设计模式·备忘录模式
ttod_qzstudio2 天前
【软考设计模式】责任链模式:请求传递的多级处理与发送接收解耦精讲
设计模式·责任链模式
2501_914245932 天前
C语言设计模式详解:从理论到实践的完整指南
c语言·开发语言·设计模式
CaffeinePro3 天前
四⼤极简架构原则KISS/DRY/YAGNI/LOD
设计模式·架构