vue中實現axios路由跳轉取消上個路由頁面的所有請求 和 取消當前路由頁面的重複請求

一、 拋出問題

1、當一個頁面的請求過長時,點擊了跳轉路由到新的頁面,但是上一個路由的請求結果在當前路由頁面提示,非常難看且容易讓客戶混淆。(所以需要路由跳轉取消上個路由頁面的所有請求
2、在當前頁面某個請求長時間沒拿到返回結果,然後用戶又點擊發起了相同請求,這時有可能後發送的請求返回的數據被先發送的請求覆蓋,這樣就得不到最新請求數據了。(所以需要取消當前路由頁面的重複請求,以保證後發送的請求返回的數據不會被先發送的請求覆蓋)

二、解決問題

1、因爲要取消多個請求,所以需要把請求存在數組中,這裏我使用了vuex來管理
在state.js中新建個變量axiosPromiseCancel:
在這裏插入圖片描述
2、在mutations.js中定義好設置axiosPromiseCancel 和 取消axiosPromiseCancel請求的方法
在這裏插入圖片描述
3、在axios 攔截器封裝的js中----------保存請求到數組中 和 取消數組中重複的請求
注意:紅色方框中的代碼都是重點
在這裏插入圖片描述4、在路由全局前置守衛中取消數組中的所有請求(即上個路由頁面所保存在數組中的請求)
在這裏插入圖片描述

三、效果圖

1、取消當前頁面觸發的重複請求(取消之前重複的)
當連續發起相同請求時,因爲上一個請求還在pending狀態所以直接取消了,然後使用最新發起的請求。
在這裏插入圖片描述2、路由跳轉頁面,取消上一個路由頁面的所有請求
如果上一個路由頁面的請求還在pending中則直接全部canceled,如果已經成功200,那麼沒影響
在這裏插入圖片描述

參考資料:
https://www.cnblogs.com/zhaofeis/p/11422777.html
https://juejin.im/post/5c3ea11c51882525aa507f0d

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章