Axios 取消重復(fù)請求

項目地址:https://github.com/Ewall1106/mall

有什么用?

  • 當(dāng)用戶頻繁點擊在短時間內(nèi)發(fā)送多個 ajax 請求,但是由于網(wǎng)絡(luò)原因服務(wù)器數(shù)據(jù)無法及時響應(yīng)返回,這時候,就會有可能造成前端頁面數(shù)據(jù)不匹配的情況。

  • 具體場景來說,在用戶網(wǎng)速不好的情況下的比如搜索框 onchange 事件的模糊搜索、觸底刷新請求列表數(shù)據(jù)、tab 欄的高頻切換等等。

  • 再者,這樣也浪費服務(wù)器資源,也是性能優(yōu)化的一種必要手段。

基本使用

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // An executor function receives a cancel function as a parameter
    cancel = c;
  }),
});

// cancel the request
cancel();

具體使用

  • 利用 axios 的攔截器,在請求攔截的時候?qū)?dāng)前 request url取消函數(shù)ckey-value 的形式保存下來。

  • 在響應(yīng)攔截器時將這個 key 刪除,如果重復(fù)請求了就會調(diào)用取消請求函數(shù)。

// https://github.com/Ewall1106/mall/blob/master/src/utils/request.js
import axios from 'axios';

const CancelToken = axios.CancelToken;
const pendingReq = {};

// 請求攔截器
service.interceptors.request.use(
  (config) => {
    if (store.getters.token) {
      // 取消請求
      const key = config.url + '&' + config.method;
      pendingReq[key] && pendingReq[key]('操作太頻繁了~');
      config.cancelToken = new CancelToken((c) => {
        pendingReq[key] = c;
      });
      // ...
    }
    return config;
  },
  (error) => {
    console.log(error);
    return Promise.reject(error);
  }
);

// 響應(yīng)攔截器
service.interceptors.response.use(
  (response) => {
    // 取消請求
    const key = response.config.url + '&' + response.config.method;
    pendingReq[key] && delete pendingReq[key];

    // ...
  },
  (error) => {
    console.log('err' + error);
    Toast.fail(error.message);
    return Promise.reject(error);
  }
);

export default service;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在開發(fā)中,經(jīng)常會遇到接口重復(fù)請求導(dǎo)致的各種問題。 對于重復(fù)的get請求,會導(dǎo)致頁面更新多次,發(fā)生頁面抖動的現(xiàn)象,影...
    zhao_ran閱讀 3,059評論 0 14
  • 由于接口響應(yīng)速度等原因,在項目開發(fā)中經(jīng)常需要處理重復(fù)點擊導(dǎo)致多次調(diào)用接口的問題,針對每個接口調(diào)用單獨處理相對繁瑣,...
    LongfeiSong閱讀 2,259評論 0 1
  • 自己碰到的問題,扒了很多文檔才理清楚,當(dāng)做是筆記記下來說到取消接口請求,可能沒碰到這樣的坑冷不丁還有點懵,為什么會...
    蝸牛先笙閱讀 77,168評論 33 126
  • 請求攔截和請求取消 在項目的實際開發(fā)中,會遇到請求需要手動取消的需求,比如:切換頁面取消上個頁面還未返回的請求、用...
    Wermdany閱讀 9,172評論 0 3
  • 久違的晴天,家長會。 家長大會開好到教室時,離放學(xué)已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,812評論 16 22

友情鏈接更多精彩內(nèi)容