国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

axios取消請求CancelToken的用法

這篇具有很好參考價值的文章主要介紹了axios取消請求CancelToken的用法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

axios中取消請求情況分為1:取消該請求之后的相同請求;2:取消該請求之前的相同請求
##取消該請求之后的相同請求:
在使用 axios 發(fā)送請求時,如果在短時間內(nèi)連續(xù)發(fā)送同一個請求,可能會出現(xiàn)請求結(jié)果混亂或重復(fù)響應(yīng)的問題。為了避免這種情況,我們可以使用 axios 的取消請求功能,每次發(fā)送請求前先取消之前的請求。下面是使用 axios 取消請求的示例代碼:

import axios from 'axios';
 // 創(chuàng)建一個 CancelToken 對象
const source = axios.CancelToken.source();
 // 發(fā)送請求
axios.get('/api/data', {
  // 將 cancelToken 屬性設(shè)置為上面創(chuàng)建的 CancelToken 實例
  cancelToken: source.token
}).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error);
});
 // 取消之前的請求
source.cancel('Duplicate request');

在上面的代碼中,我們先創(chuàng)建一個 CancelToken 對象 source ,并將其傳遞給發(fā)送請求的 cancelToken 屬性中。然后在需要取消之前請求的時候,調(diào)用 source.cancel() 方法即可。此時,后續(xù)的請求將不會被發(fā)送,以避免重復(fù)響應(yīng)。

需要注意的是,如果在請求被取消之前,請求已經(jīng)被發(fā)送并成功響應(yīng),那么該已經(jīng)成功響應(yīng)的請求結(jié)果無法被取消,因此也需要對已經(jīng)成功響應(yīng)的請求結(jié)果做好處理。另外,也需要處理請求被取消的異常情況,以避免出現(xiàn)錯誤。

##取消該請求之前的相同請求:
在 axios 中,取消上一次請求與取消前面的所有請求是有差別的。取消上一次請求,我們可以記錄當前請求的 cancelToken ,然后在下一次請求之前發(fā)送一個取消請求的操作。而取消前面的所有請求,我們需要維護一份請求隊列,然后在新的請求發(fā)起之前,將之前的所有請求都取消掉。

下面是一個實現(xiàn)取消前面的所有請求的例子:

import axios from 'axios';
 // 創(chuàng)建一個請求隊列
let pending = [];
const CancelToken = axios.CancelToken;
const removePending = (config) => {
  for (let p in pending) {
    if (pending[p].url === config.url + '&' + config.method) {
      pending[p].cancel("request canceled");
      pending.splice(p, 1);
    }
  }
}
 // 添加請求攔截器
axios.interceptors.request.use(
  (config) => {
    removePending(config);
    config.cancelToken = new CancelToken((c) => {
      pending.push({ cancel: c, url: config.url + '&' + config.method });
    });
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);
 // 響應(yīng)攔截器
axios.interceptors.response.use(
  (response) => {
    removePending(response.config);
    return response;
  },
  (error) => {
    return Promise.reject(error);
  }
);

在上面的代碼中,我們創(chuàng)建了一個請求隊列 pending ,然后為請求配置添加了一個 cancelToken ,并將其推入請求隊列中。在發(fā)送新的請求之前,我們遍歷請求隊列,將之前的所有請求都取消掉,并從請求隊列中移除。同時,我們還需要在響應(yīng)攔截器中將已經(jīng)完成的請求從請求隊列中移除。

需要注意的是,如果發(fā)送的請求是無法取消的,例如使用 jsonp 發(fā)送的請求,那么上面的代碼將無法取消這類請求。因此,我們需要根據(jù)實際情況選擇合適的方式來取消請求。

###取消之后再次發(fā)送請求提示被cancel怎么辦?
如果在 axios 中取消了一個請求,那么再次發(fā)送同樣的請求會提示 Cancellation 已經(jīng)被取消的錯誤。這是因為 axios 同樣的請求已經(jīng)被 cancel ,因此無法再次發(fā)送。如果需要再次發(fā)送同樣的請求,需要重新創(chuàng)建一個新的 cancelToken ,否則會一直提示被取消。
下面是一個重新創(chuàng)建 cancelToken 的示例代碼:

import axios from 'axios';
let cancelToken = axios.CancelToken;
let cancel;
let config = {
  method: 'get',
  url: '/api/data',
  cancelToken: new cancelToken(function executor(c) {
    // executor 函數(shù)接收一個 cancel 函數(shù)作為參數(shù)
    cancel = c;
  })
};
// 添加請求攔截器
axios.interceptors.request.use(
  (config) => {
    // 如果 cancel 存在說明上次請求被取消了,重新創(chuàng)建一個
    if (typeof cancel === 'function') {
      config.cancelToken = new cancelToken(function executor(c) {
        cancel = c;
      });
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);
// 發(fā)送請求
axios(config)
  .then((response) => {
    console.log(response);
  })
  .catch((error) => {
    if (axios.isCancel(error)) {
      console.log('Request canceled', error.message);
    } else {
      console.log(error);
    }
  });
// 取消請求
cancel();

在上面的代碼中,我們在發(fā)送請求前先創(chuàng)建了一個 cancelToken ,并將 cancel 函數(shù)保存下來。當發(fā)送請求時,我們檢查 cancel 函數(shù)是否存在,如果存在說明上次請求被取消了,那么我們需要重新創(chuàng)建一個 cancelToken 并將其傳遞給新的請求中。這樣就可以在取消請求后重新發(fā)送同樣的請求了。
由于axios是對XHR對象的封裝,如果請求已經(jīng)被發(fā)送并且服務(wù)器已經(jīng)接收到請求,那么cancelToken 在調(diào)用 abort() 方法取消請求可能會導(dǎo)致一部分數(shù)據(jù)已經(jīng)被傳輸。因此,使用 時需要謹慎。

fetch請求才可以做到真正意義上的取消?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-630776.html

到了這里,關(guān)于axios取消請求CancelToken的用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • antdesign+vue+ts自定義上傳文件customRequest,顯示進度條onProgress,axios請求中斷axios.CancelToken。

    customRequest里面有一個data參數(shù),data包含了對file文件上傳狀態(tài)的操作:例如:onSuccess、onProgress、onError等 和file文件。 改變文件上傳狀態(tài):可以通過改變fileList里面file的status和respones。 踩坑: 1、在customRequest文件上傳完成以后,會自動重新更新一下fileList文件。上傳之前掛載在

    2023年04月25日
    瀏覽(25)
  • 前端網(wǎng)絡(luò)請求之JavaScript XHR、Fetch、Axios

    AJAX:一種在無需重新加載整個網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)。在后臺與服務(wù)器進行少量數(shù)據(jù)交換,Ajax 可以使網(wǎng)頁實現(xiàn)異步更新。在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進行更新 Fetch:基于 promise 設(shè)計的。Fetch 的代碼結(jié)構(gòu)比起 ajax 簡單多。fetch 不是 aj

    2024年01月23日
    瀏覽(33)
  • axios使用axiosSource.cancel取消請求后怎么恢復(fù)請求,axios取消請求和恢復(fù)請求實現(xiàn)

    axios使用axiosSource.cancel取消請求后怎么恢復(fù)請求,axios取消請求和恢復(fù)請求實現(xiàn)

    在前端做大文件分片上傳,或者其它中斷請求時,需要暫停或重新請求,比如這里大文件上傳時,可能會需要暫停、繼續(xù)上傳,如下GIF演示: 這里不詳細說文件上傳的處理和切片細節(jié),后續(xù)有時間在出一篇,大文件上傳,切片上傳、斷點續(xù)傳、秒傳等??。 不扯遠了,緊接本

    2024年02月12日
    瀏覽(23)
  • axios中取消請求的使用

    1.全局定義一個axios控制器變量 axiosController 2.配置axios 對象signal 3.創(chuàng)建setAxiosController函數(shù) 導(dǎo)出變量、函數(shù) 每次調(diào)用axiosController.abort()方法后就需要重新調(diào)用setAxiosController; axios官網(wǎng) 取消請求 mdn官網(wǎng) AbortController在fetch中的使用

    2024年02月07日
    瀏覽(21)
  • axios如何取消請求,其原理是什么?

    原文合集地址如下,有需要的朋友可以關(guān)注 本文地址 axios 可以通過創(chuàng)建一個 CancelToken 來取消一個請求,基本原理是: 創(chuàng)建一個 CancelToken 的實例,它有一個 executor 函數(shù),可以通過調(diào)用 executor 參數(shù)中的 cancel 函數(shù)來取消請求。 在 axios 請求配置中指定 cancelToken 屬性,將 CancelToken 實例

    2024年02月12日
    瀏覽(20)
  • 封裝axios請求重試和路由切換時請求取消

    封裝axios請求重試和路由切換時請求取消

    請求重試函數(shù):這里注意兩個變量__retryCount 和retry分別代表當前次數(shù)和重試次數(shù)。如果請求中沒有配置retry則正常進行不會進行重試。 請求取消我這里的場景是路由切換時,將上次路由全部取消也可以配置部分取消。注意變量noCancel,他來控制那些不需要被取消。 回顧axios請

    2024年02月21日
    瀏覽(26)
  • 簡單易懂:Axios 如何取消請求的兩種方法

    簡單易懂:Axios 如何取消請求的兩種方法

    在前端開發(fā)中,網(wǎng)絡(luò)請求是非常常見的操作。而有時候,我們可能需要在發(fā)送請求后取消它,比如用戶在請求還未完成時離開了當前頁面或者執(zhí)行了其他操作,本文將介紹如何在使用 Axios 發(fā)送請求時取消這些請求。 在 Axios 中,取消請求的基本思路是創(chuàng)建一個用于取消的標記

    2024年01月19日
    瀏覽(20)
  • vue2/3 axios 請求重試、取消請求、loading 串行并行等(分享)

    基礎(chǔ)版,添加 loading 在請求響應(yīng)攔截器里面添加 loading,這樣就不需要給每一個請求添加 loading 了 這些代碼都是 vue2 項目的,vue3 也通用,改一下 loading 和 message 就好了(主要是 element 的區(qū)別) 我這里最后沒有合并代碼,有的配置不適合寫在一起,看自己項目的需要 響應(yīng)狀態(tài)

    2024年02月10日
    瀏覽(24)
  • 優(yōu)化axios封裝之配置使用AbortController取消重復(fù)請求 防止用戶頻繁操作調(diào)用接口

    當數(shù)據(jù)量過大請求緩慢時用戶點擊按鈕或者tab標簽頁快速重復(fù)調(diào)用同一個請求時,會導(dǎo)致數(shù)據(jù)錯亂,當只需要最新的請求數(shù)據(jù),并且中斷上一個重復(fù)請求時,可以利用axios的CancelToken去中斷之前的請求。 ps:由于不是所有請求都需要這個邏輯 所以我封裝的時候增加了請求配置項

    2024年02月03日
    瀏覽(21)
  • Vue3 網(wǎng)絡(luò)請求——axios 高級用法之 axios 攔截器實戰(zhàn)與并發(fā)請求

    Vue3 網(wǎng)絡(luò)請求——axios 高級用法之 axios 攔截器實戰(zhàn)與并發(fā)請求

    Axios 是一個流行的基于 Promise 的 HTTP 客戶端庫,用于在瀏覽器和 Node.js 中發(fā)出 HTTP 請求。 Axios 還支持請求和響應(yīng)的攔截器。接下來通過這篇文章,我們一起來學(xué)習和了解一下 Axios 攔截器和并發(fā)請求,通過實際代碼來介紹如何使用 Axios 攔截器。 攔截器會在發(fā)生響應(yīng)請求之前和

    2024年02月10日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包