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

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

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

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

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

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

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

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

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

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

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

定时器

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

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

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

发布订阅模式

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

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

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

小结

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

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

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

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

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

标签:
  • 热门焦点
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top