成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用「設計模式」巧妙解決 BUG 的經歷,妙啊~

開發
本文利用了發布訂閱模式這種設計模式,來解決我們日常的一些簡單業務。

是這樣的,這天,我接到了一個 BUG,當然這個 BUG 不是我寫的,是這樣的有兩個頁面:

  • 頁面 A:有同步代碼,有異步代碼
  • 頁面 B:全是同步代碼

注意:此項目是老項目,沒有全局狀態管理工具!!!

// 頁面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<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 了!!

// 頁面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

小結

這就是利用了 發布訂閱模式 這種設計模式,來解決我們日常的一些簡單業務,所以大家可以多用,這樣在面試時就不怕面試官問你啦!

責任編輯:趙寧寧 來源: 前端之神
相關推薦

2022-06-27 08:01:55

動畫CSS前端

2022-05-17 07:26:33

動畫CSS前端

2022-02-17 13:46:15

SSH命令內網

2025-03-17 10:01:07

2011-05-12 13:07:28

SQL Server復制漏洞

2021-02-02 21:42:30

VS Code編輯器開發

2022-05-16 08:57:36

Python可視化代碼

2013-11-11 15:15:38

設計用戶體驗

2021-05-08 10:36:31

開發Java Map

2021-03-26 00:00:05

?JavaMap設計

2009-03-02 10:13:00

交換機端口模式

2009-03-17 09:37:00

ADSL分流寬帶接入

2010-08-31 13:56:38

PHP5多線程

2009-01-15 09:49:00

網絡地址切換

2009-02-19 10:14:00

2017-11-27 11:26:35

程序員Bug調試

2022-09-19 06:25:14

設計模式GoF

2014-08-08 16:17:49

shell腳本linux

2009-12-31 14:50:12

ADSL網絡無法解析

2013-08-02 09:33:31

Android碎片化Google
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产99国产 | 欧洲精品视频一区 | 欧美做暖暖视频 | 欧美自拍另类 | jizz视频 | 国产成人99久久亚洲综合精品 | 五月婷婷视频 | 夜夜草天天草 | 拍拍无遮挡人做人爱视频免费观看 | 久久久久久国产精品免费免费 | 男女在线网站 | 亚洲一区二区中文字幕在线观看 | 国产免费一区二区 | 国产精品久久一区 | 国产综合网址 | 久久国产高清 | 亚洲一区免费视频 | 日韩国产在线 | 免费黄色大片 | 91国产精品 | 国产夜恋视频在线观看 | 亚洲国产成人精品女人久久久 | 国产片侵犯亲女视频播放 | 成人免费在线视频 | 国产999精品久久久影片官网 | 一区二区精品 | 国产一级片久久久 | 成人免费淫片aa视频免费 | 久久999| 自拍偷拍中文字幕 | 久久国产精品-国产精品 | 91精品国产综合久久久动漫日韩 | 久久不卡 | 古典武侠第一页久久777 | 久久久综合| 亚洲精品一区二区网址 | 在线观看国产视频 | 精品一区二区三区中文字幕 | 欧美日韩综合一区 | 热久久国产 | www精品 |