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

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

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

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

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

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

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

EgK28资讯网——每日最新资讯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))

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

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

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

定时器

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

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

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

发布订阅模式

所以还是使用发布订阅,首先实现一个发布订阅中心,以下是简单实现:EgK28资讯网——每日最新资讯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 了!!EgK28资讯网——每日最新资讯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)  )})

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

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

小结

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

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

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

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

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

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 三星显示已开始为AR设备研发硅基LED微显示屏

    7月18日消息,据外媒报道,随着苹果首款头显产品Vision Pro在6月份正式推出,AR/VR/MR等头显产品也就将成为各大公司下一个重要的竞争领域,对显示屏这一关
Top