日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-06-20 15:19:12 141觀看
導讀是這樣的,這天,我接到了一個 BUG,當然這個 BUG 不是我寫的,是這樣的有兩個頁面:頁面 A:有同步代碼,有異步代碼頁面 B:全是同步代碼注意:此項目是老項目,沒有全局狀態管理工具!!!// 頁面Aconsole.log(1)console.log(2)http.get(url)

是這樣的,這天,我接到了一個 BUG,當然這個 BUG 不是我寫的,是這樣的有兩個頁面:2y828資訊網——每日最新資訊28at.com

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

2y828資訊網——每日最新資訊28at.com

注意:此項目是老項目,沒有全局狀態管理工具!!!2y828資訊網——每日最新資訊28at.com

2y828資訊網——每日最新資訊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))

然后這兩個頁面是先后加載的,那么我們可以得出輸出順序是:2y828資訊網——每日最新資訊28at.com

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

因為請求是異步的,導致頁面B那邊拿不到 localStorage 里面的東西,而無法完成很多操作,導致了出現 BUG。所以得想想怎么去解決這個 BUG。2y828資訊網——每日最新資訊28at.com

定時器

最簡單的就是利用定時器去解決:2y828資訊網——每日最新資訊28at.com

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

但是這樣是不對的,不好維護,濫用定時器會導致以后可能會有新的 BUG 出現!!!2y828資訊網——每日最新資訊28at.com

發布訂閱模式

所以還是使用發布訂閱,首先實現一個發布訂閱中心,以下是簡單實現:2y828資訊網——每日最新資訊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 了!!2y828資訊網——每日最新資訊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)  )})

現在的輸出順序就是:2y828資訊網——每日最新資訊28at.com

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

小結

這就是利用了 發布訂閱模式 這種設計模式,來解決我們日常的一些簡單業務,所以大家可以多用,這樣在面試時就不怕面試官問你啦!2y828資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-95149-0.html使用「設計模式」巧妙解決 BUG 的經歷,妙啊~

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C++模板增強,模板編程更上一層樓

下一篇: 用 Python 代替 xftp 從 Linux 服務器下載文件

標簽:
  • 熱門焦點
  • 6月iOS設備好評榜:第一蟬聯榜首近一年

    作為安兔兔各種榜單里變化最小的那個,2023年6月的iOS好評榜和上個月相比沒有任何排名上的變化,僅僅是部分設備好評率的下降,長年累月的用戶評價和逐漸退出市場的老款機器讓這
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 企業采用CRM系統的11個好處

    客戶關系管理(CRM)軟件可以為企業提供很多的好處,從客戶保留到提高生產力。  CRM軟件用于企業收集客戶互動,以改善客戶體驗和滿意度。  CRM軟件市場規模如今超過580
  • 深度探索 Elasticsearch 8.X:function_score 參數解讀與實戰案例分析

    在 Elasticsearch 中,function_score 可以讓我們在查詢的同時對搜索結果進行自定義評分。function_score 提供了一系列的參數和函數讓我們可以根據需求靈活地進行設置。近期
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 疑似小米14外觀設計圖曝光:后置相機模組變化不大

    下半年的大幕已經開啟,而誰將成為下半年手機圈的主角就成為了大家關注的焦點,其中被傳有望拿下新一代驍龍8 Gen3旗艦芯片的小米14系列更是備受大家矚
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 澄江县| 南漳县| 苏尼特右旗| 杭锦旗| 重庆市| 宁城县| 石渠县| 蒲江县| 沁水县| 武穴市| 永丰县| 甘肃省| 米泉市| 竹山县| 凌云县| 会东县| 滕州市| 马龙县| 南丰县| 德令哈市| 长岭县| 清水县| 宿松县| 铜梁县| 吴堡县| 赣榆县| 朝阳县| 汤阴县| 松原市| 寿光市| 宝应县| 湘乡市| 德惠市| 福泉市| 盐城市| 嘉善县| 年辖:市辖区| 丹阳市| 汾阳市| 融水| 蓝田县|