当前位置:首页 > 科技  > 软件

使用「设计模式」巧妙解决 BUG 的经历,妙啊~

来源: 责编: 时间:2024-06-20 15:19:12 236观看
导读是这样的,这天,我接到了一个 BUG,当然这个 BUG 不是我写的,是这样的有两个页面:页面 A:有同步代码,有异步代码页面 B:全是同步代码注意:此项目是老项目,没有全局状态管理工具!!!// 页面Aconsole.log(1)console.log(2)http.get(url)

是这样的,这天,我接到了一个 BUG,当然这个 BUG 不是我写的,是这样的有两个页面:Po228资讯网——每日最新资讯28at.com

  • 页面 A:有同步代码,有异步代码
  • 页面 B:全是同步代码

Po228资讯网——每日最新资讯28at.com

注意:此项目是老项目,没有全局状态管理工具!!!Po228资讯网——每日最新资讯28at.com

Po228资讯网——每日最新资讯28at.com

// 页面Aconsole.log(1)console.log(2)http.get(url).then(res => {  console.log(3)  localStorage.setItem(key, res)})// 页面Bconsole.log(  localStorage.getItem(key))

然后这两个页面是先后加载的,那么我们可以得出输出顺序是:Po228资讯网——每日最新资讯28at.com

1 // 页面A2 // 页面Aundefined // 页面Bconsole.log(3) // 页面A

因为请求是异步的,导致页面B那边拿不到 localStorage 里面的东西,而无法完成很多操作,导致了出现 BUG。所以得想想怎么去解决这个 BUG。Po228资讯网——每日最新资讯28at.com

定时器

最简单的就是利用定时器去解决:Po228资讯网——每日最新资讯28at.com

// 页面BsetTimeout(() => {  console.log(  localStorage.getItem(key)  )})

但是这样是不对的,不好维护,滥用定时器会导致以后可能会有新的 BUG 出现!!!Po228资讯网——每日最新资讯28at.com

发布订阅模式

所以还是使用发布订阅,首先实现一个发布订阅中心,以下是简单实现:Po228资讯网——每日最新资讯28at.com

type Callback<T> = (data: T) => void;class PubSub<T> {  private subscribers: Callback<T>[] = [];  subscribe(callback: Callback<T>): void {    this.subscribers.push(callback);  }  unsubscribe(callback: Callback<T>): void {    this.subscribers = this.subscribers.filter(fn => fn !== callback);  }  publish(data: T): void {    this.subscribers.forEach(fn => fn(data));  }}export const ps = new PubSub();

接着就可以用它来解决我们那个 BUG 了!!Po228资讯网——每日最新资讯28at.com

// 页面Aconsole.log(1)console.log(2)http.get(url).then(res => {  console.log(3)  localStorage.setItem(key, res)  ps.publish(res)})// 页面B// 订阅ps.subscribe((res) => {  console.log(res)  console.log(    localStorage.getItem(key)  )})

现在的输出顺序就是:Po228资讯网——每日最新资讯28at.com

1 // 页面A2 // 页面Aconsole.log(3) // 页面Ares // 页面Bres // 页面B

小结

这就是利用了 发布订阅模式 这种设计模式,来解决我们日常的一些简单业务,所以大家可以多用,这样在面试时就不怕面试官问你啦!Po228资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-95149-0.html使用「设计模式」巧妙解决 BUG 的经历,妙啊~

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C++模板增强,模板编程更上一层楼

下一篇: 用 Python 代替 xftp 从 Linux 服务器下载文件

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 2023年,我眼中的字节跳动

    此时此刻(2023年7月),字节跳动从未上市,也从未公布过任何官方的上市计划;但是这并不妨碍它成为中国最受关注的互联网公司之一。从2016-17年的抖音强势崛起,到2018年的&ldquo;头腾
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • 携众多高端产品亮相ChinaJoy,小米带来一场科技与人文的视听盛宴

    7月28日,全球数字娱乐领域最具知名度与影响力的年度盛会中国国际数码互动娱乐展览会(简称ChinaJoy)在上海新国际博览中心盛大开幕。作为全球领先的科
  • 滴滴违法违规被罚80.26亿 共存在16项违法事实

    滴滴违法违规被罚80.26亿 存在16项违法事实开始于2121年7月,历经一年时间,网络安全审查办公室对“滴滴出行”网络安全审查终于有了一个暂时的结束。据“网信
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
Top