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

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

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

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

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

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

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

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

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

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

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

定时器

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

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

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

发布订阅模式

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

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

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

小结

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

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

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

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

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

标签:
  • 热门焦点
  • 一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    一加Ace2 Pro真机揭晓 钛空灰配色质感拉满

    终于,在经过了几波预热之后,一加Ace2 Pro的外观真机图在网上出现了。还是博主数码闲聊站曝光的,这次的外观设计还是延续了一加11的方案,只是细节上有了调整,例如新加入了钛空灰
  • 石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    石头自清洁扫拖机器人G10S评测:多年黑科技集大成之作 懒人终极福音

    科技圈经常能看到一个词叫“缝合怪”,用来形容那些把好多功能或者外观结合在一起的产品,通常这样的词是贬义词,但如果真的是产品缝合的好、缝合的实用的话,那它就成了中性词,今
  • 一文看懂为苹果Vision Pro开发应用程序

    一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 十个简单但很有用的Python装饰器

    十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • Android 14发布:首批适配机型公布

    Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
Top