避免併發的重複請求 for Angular

2021-09-13 02:35:55 字數 1759 閱讀 2348

在專案的實際開發中偶然遇到了相同的get請求被連續觸發的問題,典型用例如cms系統首頁開啟時導航欄需要載入欄目資料,頁面中的欄目列表也同樣請求該資料。當然,理想狀態下可以要求導航欄先載入並快取,然後其它元件從快取中獲取,然而實際上這些功能可能由不同的開發者編寫,那麼協調起來就麻煩一些了。而且越複雜的系統就更容易的出現這個問題,所以不得不解決一下了。

最初遇到這個問題是在乙個angularjs(angularjs1.6測試通過)專案中,所以先丟這個出來:

/**

* 這只是乙個簡單的例子,請自行擴充套件。

* 返回的值總是乙個promise,這樣就默默的攔截了重複的請求

* 注意:這裡使用了本地快取,這可能造成資料無法更新,

* 而下乙個例子則僅僅是過濾掉乙個請求週期之內重複的請求

*/function get(url) else

} else );

defer.resolve(promise);

}return defer.promise();

}

angular版本 (angular6測試通過)

/**

* 這是最簡**,錯誤處理等是使用***實現的

//如果配置檔案中設定了**那麼可以丟掉這個

}}//呼叫測試,不必要的**全略掉

instanceofapirequestservice.exec('get', '/api/dashboard').subscribe(data => );

instanceofapirequestservice.exec('get', '/api/dashboard').subscribe(data => );

instanceofapirequestservice.exec('get', '/api/dashboard').subscribe(data => );

//三次log都被觸發,但是只有一次http請求。

剛接觸angular6不久,不管是我這個想法本身有錯誤還是解決的方式有問題都請拍磚不要客氣,只求大俠的磚頭上繪製一下示例**,不勝感激。

如何處理重複請求 併發請求的

你可能會想到的是,只要請求有唯一的請求編號,那麼就能借用redis做這個去重 只要這個唯一請求編號在redis存在,證明處理過,那麼就認為是重複的 string key req12343456788 請求唯一編號 long expiretime 1000 1000毫秒過期,1000ms內的重複請求會...

資料庫併發插入避免重複資料的問題

今天稍微研究了下這個問題從網上整理資料大致得到了如下方案,先粗略記錄下,下班回去再更詳細記錄下。所有的方法都先不考慮效能問題,也不考慮業務,只看邏輯上能否達到去重,因為第一,如果唯一性是必須要保證的,那麼只能先實現了唯一,再去考慮優化 第二,如果能通過調整業務來規避,那我後面說的都是廢話了還有什麼看...

避免建立重複的物件

避免建立重複的物件,如果乙個物件是不可變的,那麼它總是可一被重用 書中的例子 string s new string silly 這個為什麼不好?該語句每次被執行的時候都建立乙個新的string例項.string s silly 只使用乙個string例項 今年年初,專案組在進行專案優化的時候,遇到...