文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-29 21:07

关注

注意:此项目是老项目,没有全局状态管理工具!!!

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

// 页面B
console.log(
  localStorage.getItem(key)
)

然后这两个页面是先后加载的,那么我们可以得出输出顺序是:

1 // 页面A
2 // 页面A
undefined // 页面B
console.log(3) // 页面A

因为请求是异步的,导致页面B那边拿不到 localStorage 里面的东西,而无法完成很多操作,导致了出现 BUG。所以得想想怎么去解决这个 BUG。

定时器

最简单的就是利用定时器去解决:

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

但是这样是不对的,不好维护,滥用定时器会导致以后可能会有新的 BUG 出现!!!

发布订阅模式

所以还是使用发布订阅,首先实现一个发布订阅中心,以下是简单实现:

type Callback = (data: T) => void;

class PubSub {
  private subscribers: Callback[] = [];

  subscribe(callback: Callback): void {
    this.subscribers.push(callback);
  }

  unsubscribe(callback: Callback): 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 了!!

// 页面A
console.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)
  )
})

现在的输出顺序就是:

1 // 页面A
2 // 页面A
console.log(3) // 页面A
res // 页面B
res // 页面B

小结

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

来源:前端之神内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯