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

使用「設(shè)計模式」巧妙解決 BUG 的經(jīng)歷,妙啊~

開發(fā)
本文利用了發(fā)布訂閱模式這種設(shè)計模式,來解決我們?nèi)粘5囊恍┖唵螛I(yè)務(wù)。

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

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

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

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

因為請求是異步的,導(dǎo)致頁面B那邊拿不到 localStorage 里面的東西,而無法完成很多操作,導(dǎo)致了出現(xiàn) BUG。所以得想想怎么去解決這個 BUG。

定時器

最簡單的就是利用定時器去解決:

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

但是這樣是不對的,不好維護,濫用定時器會導(dǎo)致以后可能會有新的 BUG 出現(xiàn)!!!

發(fā)布訂閱模式

所以還是使用發(fā)布訂閱,首先實現(xiàn)一個發(fā)布訂閱中心,以下是簡單實現(xiàn):

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)
  )
})

現(xiàn)在的輸出順序就是:

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

小結(jié)

這就是利用了 發(fā)布訂閱模式 這種設(shè)計模式,來解決我們?nèi)粘5囊恍┖唵螛I(yè)務(wù),所以大家可以多用,這樣在面試時就不怕面試官問你啦!

責(zé)任編輯:趙寧寧 來源: 前端之神
相關(guān)推薦

2022-06-27 08:01:55

動畫CSS前端

2022-05-17 07:26:33

動畫CSS前端

2022-02-17 13:46:15

SSH命令內(nèi)網(wǎng)

2025-03-17 10:01:07

2011-05-12 13:07:28

SQL Server復(fù)制漏洞

2021-02-02 21:42:30

VS Code編輯器開發(fā)

2022-05-16 08:57:36

Python可視化代碼

2013-11-11 15:15:38

設(shè)計用戶體驗

2021-05-08 10:36:31

開發(fā)Java Map

2021-03-26 00:00:05

?JavaMap設(shè)計

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

網(wǎng)絡(luò)地址切換

2009-02-19 10:14:00

2017-11-27 11:26:35

程序員Bug調(diào)試

2022-09-19 06:25:14

設(shè)計模式GoF

2014-08-08 16:17:49

shell腳本linux

2009-06-22 16:24:33

JSF框架中使用的設(shè)計

2009-06-24 17:21:23

JSF框架設(shè)計模式
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日韩精品影院 | 中日av | 日本中文字幕日韩精品免费 | 国产成人高清视频 | 亚洲午夜精品一区二区三区他趣 | 天天亚洲| 国产欧美一区二区三区久久手机版 | 91久久精品一区二区二区 | 2021狠狠干| 特一级毛片 | 黄色在线观看网址 | av网址在线播放 | 国产精品自拍视频网站 | 91精品国产色综合久久 | 日本一本视频 | 亚洲毛片 | 在线视频第一页 | 91一区二区在线观看 | 成人免费区一区二区三区 | 免费精品视频一区 | 国产网站在线免费观看 | 欧美激情一区 | 日韩视频一区二区在线 | 欧美日韩视频 | 中文字幕不卡在线88 | 成人美女免费网站视频 | 久久国产婷婷国产香蕉 | 国产精品久久久久久久久久久久久 | 黄色一级大片在线免费看产 | 免费v片| 精品欧美一区二区在线观看 | 亚洲精美视频 | 久久国产香蕉 | 国产剧情一区 | 国内精品久久久久久 | 成人在线精品视频 | 国内精品免费久久久久软件老师 | 欧美伊人久久久久久久久影院 | 欧美精品片 | 日韩欧美一级精品久久 | 国产精品久久久久久久久久免费 |