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

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

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

請求重試函數(shù):這里注意兩個變量__retryCount 和retry分別代表當(dāng)前次數(shù)和重試次數(shù)。如果請求中沒有配置retry則正常進(jìn)行不會進(jìn)行重試。

// 請求重試
async function requestAgainSend(
  err: AxiosError<any, any> & newConfig,
  axios: AxiosInstance,
) {
  const config: AxiosRequestConfig & newConfig = err.config || {};
  if (!config || !config.retry) {
    return Promise.reject(err);
  }
  config.__retryCount = config.__retryCount || 0;
  // 判斷是否超過
  if (config.__retryCount >= config.retry) {
    return Promise.reject(err);
  }
  // 重試次數(shù)
  config.__retryCount += 1;
  // 延時處理
  const backoff = new Promise(function (resolve) {
    setTimeout(function () {
      resolve("success");
    }, 1000);
  });
  await backoff;
  return await axios(config);
}

請求取消我這里的場景是路由切換時,將上次路由全部取消也可以配置部分取消。注意變量noCancel,他來控制那些不需要被取消。

回顧axios請求取消的幾種使用方式:1. 第一種使用AbortController

const controller = new AbortController();

axios.get('/foo/bar', {
   signal: controller.signal
}).then(function(response) {
   //...
});
// 取消請求
controller.abort()

第二種:

const CancelToken = axios.CancelToken;
const source = CancelToken.source();

axios.get('/user/12345', {
  cancelToken: source.token
}).catch(function (thrown) {
  if (axios.isCancel(thrown)) {
    console.log('Request canceled', thrown.message);
  } else {
    // 處理錯誤
  }
});

axios.post('/user/12345', {
  name: 'new name'
}, {
  cancelToken: source.token
})

// 取消請求(message 參數(shù)是可選的)
source.cancel('Operation canceled by the user.');

我是用的是第三種:

const CancelToken = axios.CancelToken;
let cancel;

axios.get('/user/12345', {
  cancelToken: new CancelToken(function executor(c) {
    // executor 函數(shù)接收一個 cancel 函數(shù)作為參數(shù)
    cancel = c;
  })
});

// 取消請求
cancel();

思路:全局維護(hù)一個函數(shù)集合,其中每一項為cancel(),在請求攔截中添加此函數(shù)到集合中,在beforeEach中執(zhí)行每一個函數(shù)并清空集合。

// 在pinia中維護(hù)集合和方法,方便調(diào)用
import { defineStore } from "pinia";

export const requestStore = defineStore("request", () => {
  const cancelReqList = ref([]);
  const addCancelReq = (cancel: any) => {
    const maxCancelTokenNum = 30; // 最大存cancelToken條數(shù)
    if (cancelReqList.value.length >= maxCancelTokenNum) {
      cancelReqList.value.shift();
    }
    cancelReqList.value.push(cancel);
  };
  const removeCancelReq = (index: any) => {
    cancelReqList.value.splice(index, 1);
  };
  return { cancelReqList, addCancelReq, removeCancelReq };
});



// 請求攔截中添加取消函數(shù)
service.interceptors.request.use(
  (config: any) => {
    if (!config.noCancel) {
      config.cancelToken = new axios.CancelToken((c) => {
        requestStore().addCancelReq(c);
      });
    }
    
  },
  (err: AxiosError<any, any>) => {
    return Promise.reject(err);
  },
);


// 在router beforeEach路由切換時依次執(zhí)行。
router.beforeEach(async (to, form, next) => {
  ...
  const { cancelReqList, removeCancelReq } = requestStore();
  cancelReqList.forEach((cancel, index) => {
    cancel();
    removeCancelReq(index);
  });
});

出現(xiàn)的問題

封裝axios請求重試和路由切換時請求取消,java,前端,javascript類似這種錯誤報名你取消請求成功了,但是error的結(jié)構(gòu)不再是以前的結(jié)構(gòu)了

if (error instanceof axios.Cancel) return;文章來源地址http://www.zghlxwxcb.cn/news/detail-833452.html

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

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

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

相關(guān)文章

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

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

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

    2024年02月12日
    瀏覽(22)
  • axios-retry插件-axios請求失敗自動重試

    axios-retry 對外導(dǎo)出 axiosRetry() 方法: 通過對 axios 單例添加“攔截器”,來擴(kuò)展實現(xiàn)自動重試網(wǎng)絡(luò)請求功能。 備注: ?除非? shouldResetTimeout 被設(shè)置, 這個插件 將請求超時解釋為全局值, 不是針對每一個請求,二是全局的設(shè)置 Name Type Default Description retries Number 3 The number of times t

    2024年02月10日
    瀏覽(19)
  • 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取消請求CancelToken的用法

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

    2024年02月14日
    瀏覽(16)
  • Axios中使用CancelToken取消請求

    CancelToken 是一個用于取消請求的機(jī)制。它允許在請求還未完成時,通過取消請求來終止請求的發(fā)送。這在需要在某些情況下中止正在進(jìn)行的請求時非常有用,比如文件上傳時取消上傳等。 以下是使用 CancelToken 的一般步驟: 首先,導(dǎo)入 Axios 庫和相關(guān)的依賴: 創(chuàng)建一個 Cancel

    2024年02月10日
    瀏覽(45)
  • Axios使用CancelToken取消重復(fù)請求

    Axios使用CancelToken取消重復(fù)請求

    處理重復(fù)請求:沒有響應(yīng)完成的請求,再去請求一個相同的請求,會把之前的請求取消掉 新增一個 cancelRequest.js 文件 request.js

    2024年02月12日
    瀏覽(18)
  • 【微服務(wù)】04-Polly實現(xiàn)失敗重試和限流熔斷

    【微服務(wù)】04-Polly實現(xiàn)失敗重試和限流熔斷

    1.1 Polly組件包 Polly Polly.Extensions.Http Microsoft.Extensions.Http.Polly 1.2 Polly的能力 失敗重試 服務(wù)熔斷 ? 部分服務(wù)不可用時,可以快速響應(yīng)熔斷,避免持續(xù)請求不可用服務(wù)而導(dǎo)致整個應(yīng)用程序宕掉 超時處理 ? 請求響應(yīng)超過設(shè)置的時間,可按照預(yù)定的操作進(jìn)行處理 艙壁隔離 ? 為服

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

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

    2024年02月12日
    瀏覽(19)
  • RocketMQ教程-(5)-功能特性-消息發(fā)送重試和流控機(jī)制

    本文為您介紹 Apache RocketMQ 的消息發(fā)送重試機(jī)制和消息流控機(jī)制。 消息發(fā)送重試 Apache RocketM Q的消息發(fā)送重試機(jī)制主要為您解答如下問題: 部分節(jié)點異常是否影響消息發(fā)送? 請求重試是否會阻塞業(yè)務(wù)調(diào)用? 請求重試會帶來什么不足? 消息流控 Apache RocketMQ 的流控機(jī)制主要為

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

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

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

    2024年01月19日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包