精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Axios 如何實現(xiàn)請求重試?

開源
本文介紹了在 Axios 中如何實現(xiàn)請求重試,基于文中定義的 retryAdapterEnhancer 函數(shù)或響應(yīng)攔截器,你可以輕松地擴展請求重試的功能。

[[394882]]

在 Axios 如何取消重復(fù)請求? 這篇文章中,阿寶哥介紹了在 Axios 中如何取消重復(fù)請求及 CancelToken 的工作原理。而本文將介紹在 Axios 中如何通過 攔截器或適配器 來實現(xiàn)請求重試的功能。那么為什么要進行請求重試呢?這是因為在某些情況下,比如請求超時的時候,我們希望能自動重新發(fā)起請求進行重試操作,從而完成對應(yīng)的操作。

下面阿寶哥將介紹如何使用 Axios 提供的攔截器或適配器來實現(xiàn)請求重試的功能,如果你對 Axios 的攔截器或適配器還不熟悉的話,建議先閱讀 77.9K 的 Axios 項目有哪些值得借鑒的地方 這篇文章。接下來,我們先來介紹如何使用攔截器實現(xiàn)請求重試的方案。

一、攔截器實現(xiàn)請求重試的方案

Axios 是一個基于 Promise 的 HTTP 客戶端,而 HTTP 協(xié)議是基于請求和響應(yīng):

所以 Axios 提供了 請求攔截器和響應(yīng)攔截器 來分別處理請求和響應(yīng),它們的作用如下:

  • 請求攔截器:該類攔截器的作用是在請求發(fā)送前統(tǒng)一執(zhí)行某些操作,比如在請求頭中添加 token 字段。
  • 響應(yīng)攔截器:該類攔截器的作用是在接收到服務(wù)器響應(yīng)后統(tǒng)一執(zhí)行某些操作,比如發(fā)現(xiàn)響應(yīng)狀態(tài)碼為 401 時,自動跳轉(zhuǎn)到登錄頁。

在 Axios 中設(shè)置攔截器很簡單,通過 axios.interceptors.request 和 axios.interceptors.response 對象提供的 use 方法,就可以分別設(shè)置請求攔截器和響應(yīng)攔截器:

  1. export interface AxiosInstance { 
  2.   interceptors: { 
  3.     request: AxiosInterceptorManager<AxiosRequestConfig>; 
  4.     response: AxiosInterceptorManager<AxiosResponse>; 
  5.   }; 
  6.  
  7. export interface AxiosInterceptorManager<V> { 
  8.   use(onFulfilled?: (value: V) => V | Promise<V>,  
  9.     onRejected?: (error: any) => any): number; 
  10.   eject(id: number): void; 

對于請求重試的功能來說,我們希望讓用戶不僅能夠設(shè)置重試次數(shù),而且可以設(shè)置重試延時時間。當(dāng)請求失敗的時候,若該請求的配置對象配置了重試次數(shù),而 Axios 就會重新發(fā)起請求進行重試操作。為了能夠全局進行請求重試,接下來我們在響應(yīng)攔截器上來實現(xiàn)請求重試功能,具體代碼如下所示:

  1. axios.interceptors.response.use(null, (err) => { 
  2.   let config = err.config; 
  3.   if (!config || !config.retryTimes) return Promise.reject(err); 
  4.   const { __retryCount = 0, retryDelay = 300, retryTimes } = config; 
  5.   // 在請求對象上設(shè)置重試次數(shù) 
  6.   config.__retryCount = __retryCount; 
  7.   // 判斷是否超過了重試次數(shù) 
  8.   if (__retryCount >= retryTimes) { 
  9.     return Promise.reject(err); 
  10.   } 
  11.   // 增加重試次數(shù) 
  12.   config.__retryCount++; 
  13.   // 延時處理 
  14.   const delay = new Promise((resolve) => { 
  15.     setTimeout(() => { 
  16.       resolve(); 
  17.     }, retryDelay); 
  18.   }); 
  19.   // 重新發(fā)起請求 
  20.   return delay.then(function () { 
  21.     return axios(config); 
  22.   }); 
  23. }); 

以上的代碼并不會復(fù)雜,對應(yīng)的處理流程如下圖所示:

介紹完如何使用攔截器實現(xiàn)請求重試的功能之后,下面阿寶哥來介紹適配器實現(xiàn)請求重試的方案。

二、適配器實現(xiàn)請求重試的方案

Axios 引入了適配器,使得它可以同時支持瀏覽器和 Node.js 環(huán)境。對于瀏覽器環(huán)境來說,它通過封裝 XMLHttpRequest API 來發(fā)送 HTTP 請求,而對于 Node.js 環(huán)境來說,它通過封裝 Node.js 內(nèi)置的 http 和 https 模塊來發(fā)送 HTTP 請求。

在 Axios 如何緩存請求數(shù)據(jù)? 這篇文章中,阿寶哥介紹了如何通過增強默認的 Axios 適配器,來實現(xiàn)緩存請求數(shù)據(jù)的功能。同樣,采用類似的思路,我們也可以通過增強默認的 Axios 適配器來實現(xiàn)請求重試的功能。

在介紹如何增強默認適配器之前,我們先來看一下 Axios 內(nèi)置的 xhrAdapter 適配器,它被定義在 lib/adapters/xhr.js 文件中:

  1. // lib/adapters/xhr.js 
  2. module.exports = function xhrAdapter(config) { 
  3.   return new Promise(function dispatchXhrRequest(resolve, reject) { 
  4.     var requestData = config.data; 
  5.     var requestHeaders = config.headers; 
  6.  
  7.     var request = new XMLHttpRequest(); 
  8.     // 省略大部分代碼 
  9.     var fullPath = buildFullPath(config.baseURL, config.url); 
  10.     request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); 
  11.     // Set the request timeout in MS 
  12.     request.timeout = config.timeout; 
  13.  
  14.     // Listen for ready state 
  15.     request.onreadystatechange = function handleLoad() { ... } 
  16.  
  17.     // Send the request 
  18.     request.send(requestData); 
  19.   }); 
  20. }; 

很明顯 xhrAdapter 適配器是一個函數(shù)對象,它接收一個 config 參數(shù)并返回一個 Promise 對象。而在 xhrAdapter 適配器內(nèi)部,最終會使用 XMLHttpRequest API 來發(fā)送 HTTP 請求。為了實現(xiàn)請求重試的功能,我們就可以考慮通過高階函數(shù)來增強 xhrAdapter適配器的功能。

2.1 定義 retryAdapterEnhancer 函數(shù)

為了讓用戶能夠更靈活地控制請求重試的功能,我們定義了一個 retryAdapterEnhancer函數(shù),該函數(shù)支持兩個參數(shù):

  • adapter:預(yù)增強的 Axios 適配器對象;
  • options:緩存配置對象,該對象支持 2 個屬性,分別用于配置不同的功能:
  • times:全局設(shè)置請求重試的次數(shù);
  • delay:全局設(shè)置請求延遲的時間,單位是 ms。

了解完 retryAdapterEnhancer 函數(shù)的參數(shù)之后,我們來看一下該函數(shù)的具體實現(xiàn):

  1. function retryAdapterEnhancer(adapter, options) { 
  2.   const { times = 0, delay = 300 } = options; 
  3.  
  4.   return async (config) => { 
  5.     const { retryTimes = times, retryDelay = delay } = config; 
  6.     let __retryCount = 0; 
  7.     const request = async () => { 
  8.       try { 
  9.         return await adapter(config); 
  10.       } catch (err) { 
  11.         // 判斷是否進行重試 
  12.         if (!retryTimes || __retryCount >= retryTimes) { 
  13.           return Promise.reject(err); 
  14.         } 
  15.         __retryCount++; // 增加重試次數(shù) 
  16.         // 延時處理 
  17.         const delay = new Promise((resolve) => { 
  18.           setTimeout(() => { 
  19.             resolve(); 
  20.           }, retryDelay); 
  21.          }); 
  22.          // 重新發(fā)起請求 
  23.          return delay.then(() => { 
  24.            return request(); 
  25.          }); 
  26.         } 
  27.       }; 
  28.    return request(); 
  29.   }; 

以上的代碼并不會復(fù)雜,核心的處理邏輯如下圖所示:

2.2 使用 retryAdapterEnhancer 函數(shù)

2.2.1 創(chuàng)建 Axios 對象并配置 adapter 選項

  1. const http = axios.create({ 
  2.   baseURL: "http://localhost:3000/"
  3.   adapter: retryAdapterEnhancer(axios.defaults.adapter, { 
  4.     retryDelay: 1000, 
  5.   }), 
  6. }); 

2.2.2 使用 http 對象發(fā)送請求

  1. // 請求失敗不重試 
  2. function requestWithoutRetry() { 
  3.   http.get("/users"); 
  4.  
  5. // 請求失敗重試 
  6. function requestWithRetry() { 
  7.   http.get("/users", { retryTimes: 2 }); 

好了,如何通過增強 xhrAdapter 適配器來實現(xiàn) Axios 請求重試的功能已經(jīng)介紹完了。由于完整的示例代碼內(nèi)容比較多,阿寶哥就不放具體的代碼了。感興趣的小伙伴,可以訪問以下地址瀏覽示例代碼。

  • 完整的示例代碼:
  • https://gist.github.com/semlinker/979ebc659abacea7aa6c0c44af070afe

這里我們來看一下 Axios 實現(xiàn)請求重試示例的運行結(jié)果:

三、總結(jié)

本文介紹了在 Axios 中如何實現(xiàn)請求重試,基于文中定義的 retryAdapterEnhancer 函數(shù)或響應(yīng)攔截器,你可以輕松地擴展請求重試的功能。

Axios 是一個很優(yōu)秀的開源項目,里面有很多值得我們學(xué)習(xí)與借鑒的地方。如果你對 Axios 內(nèi)部 HTTP 攔截器的設(shè)計與實現(xiàn)、HTTP 適配器的設(shè)計與實現(xiàn)及如何防御 CSRF 攻擊感興趣的話,可以閱讀 77.9K 的 Axios 項目有哪些值得借鑒的地方 這篇文章。

四、參考資源

  • Github - axios-extensions
  • Axios 如何取消重復(fù)請求?
  • Axios 如何緩存請求數(shù)據(jù)?
  • 77.9K 的 Axios 項目有哪些值得借鑒的地方

 

責(zé)任編輯:姜華 來源: 全棧修仙之路
相關(guān)推薦

2024-06-05 08:42:24

2021-04-12 05:55:29

緩存數(shù)據(jù)Axios

2021-04-06 06:01:11

AxiosWeb 項目開發(fā)

2021-07-27 14:50:15

axiosHTTP前端

2024-08-12 12:32:53

Axios機制網(wǎng)絡(luò)

2018-07-30 16:31:00

javascriptaxioshttp

2024-08-27 08:55:32

Axios底層網(wǎng)絡(luò)

2023-10-27 08:20:12

springboot微服務(wù)

2025-11-18 02:00:11

2022-01-28 14:20:53

前端代碼中斷

2024-04-30 09:53:12

axios架構(gòu)適配器

2022-08-28 19:58:59

LinkerdKubernetes

2021-05-19 09:29:52

VueAxios異步請求

2025-02-04 09:58:08

2023-10-30 09:46:08

接口重試技巧

2022-06-10 13:03:44

接口重試while

2024-01-05 13:26:00

KafkaTopicSpring

2024-01-26 07:48:10

SpringKafka提升

2022-09-15 07:31:49

Spring攔截器注解

2024-05-29 09:20:41

點贊
收藏

51CTO技術(shù)棧公眾號

91社在线播放| 成人精品网站在线观看| 亚洲成年人在线观看| 国产美女高潮在线观看| 成人激情午夜影院| 国产ts一区二区| 少妇视频一区二区| 91免费精品国偷自产在线在线 | 亚洲午夜精品久久久久久高潮| 秋霞国产精品| 亚洲主播在线观看| 日本一区二区三区视频在线播放 | 久久久国产精品一区二区三区| 国产91国语对白在线| 99热精品久久| 亚洲韩国日本中文字幕| 手机在线成人免费视频| 韩国日本一区| 国产精品美女一区二区在线观看| 成人免费视频视频在| 中文在线第一页| 欧美日韩免费| 亚洲精品一区二三区不卡| 日韩精品你懂的| 波多野结衣中文字幕久久| 中文av一区特黄| 精品蜜桃传媒| 99热这里只有精品5| 久久九九免费| 97免费视频在线播放| www日韩在线| 久久黄色影视| 欧美不卡123| 九九九九九伊人| 欧美极度另类| 狠狠久久亚洲欧美专区| 国产aaa免费视频| 欧美激情黑人| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲三级欧美| 亚洲午夜激情av| 黄瓜视频免费观看在线观看www | 久久精品亚洲热| 日b视频在线观看| 1204国产成人精品视频| 欧美日韩国产天堂| 成人午夜视频免费在线观看| 不卡视频观看| 亚洲国产一区二区视频| 黄色污污在线观看| 日本视频不卡| 亚洲欧洲国产日本综合| 亚洲图片小说在线| 午夜精品一区| 中文字幕制服丝袜一区二区三区| 日韩av一区二区三区在线| 神宫寺奈绪一区二区三区| 高清免费成人av| 51成人做爰www免费看网站| 一级黄色大片免费观看| 蜜臀久久99精品久久久画质超高清| 日本国产精品视频| 五月婷婷视频在线| 一本色道久久综合亚洲精品不卡| 97在线看福利| 国产美女激情视频| 美女精品在线观看| 国产精品va在线播放我和闺蜜| 日韩人妻精品中文字幕| 麻豆91精品| 国产精品极品美女粉嫩高清在线| 国产裸体美女永久免费无遮挡| 水蜜桃久久夜色精品一区的特点| 人人爽久久涩噜噜噜网站| 国产精品久久看| 欧美专区国产专区| 国产精品va无码一区二区三区| 久久久亚洲人| 国产精品一区二区三区成人| 亚洲图片视频小说| 黑人精品欧美一区二区蜜桃 | 精品国产一级| 欧美成人一区二区三区在线观看 | 欧美精品久久久久久久自慰| 理论不卡电影大全神| 一本久道久久综合中文字幕| 精品少妇无遮挡毛片| 日韩午夜电影免费看| 日韩你懂的在线播放| 国产夫妻性爱视频| 久久在线视频免费观看| 欧美人在线观看| 特级做a爱片免费69| 美女视频一区二区三区| 99精品99久久久久久宅男| 五月婷婷伊人网| 国产精品美女一区二区在线观看| a级黄色片免费| 一二三四视频在线中文| 欧美卡1卡2卡| 国产福利在线观看视频| 日韩成人精品一区二区| 欧美疯狂xxxx大交乱88av| 九九精品免费视频| 国产麻豆精品在线| 欧美精品一区二区三区在线看午夜| 成人精品一区二区三区免费| 一区二区久久久久| 999精品视频在线| av综合网站| 在线观看久久久久久| 国产一级片免费| 蜜桃久久av一区| 精品亚洲第一| 亚洲91av| 欧美久久久久免费| 日本黄色网址大全| 欧美成人日韩| 国产欧美一区二区三区视频| 亚洲欧美日韩成人在线| 亚洲男帅同性gay1069| 欧美午夜性生活| 美女一区2区| 欧美另类在线播放| 在线观看av大片| 国产日韩欧美制服另类| 日韩网站在线免费观看| 精品91福利视频| 一区二区三区精品99久久 | 欧美性xxxx极品高清hd直播| 国产女同无遮挡互慰高潮91| 精品久久久中文字幕| 97视频色精品| 亚洲AV无码乱码国产精品牛牛| 欧美韩国日本综合| aaa毛片在线观看| 欧美男人操女人视频| 欧美精品videosex极品1| 91资源在线视频| 国产欧美一二三区| 国产精品欧美激情在线观看| 豆花视频一区二区| 久久69精品久久久久久久电影好 | 久久精品日产第一区二区三区 | 亚洲人和日本人hd| 97在线看福利| 欧美一区二区在线观看视频| 一区二区三区日韩| 一卡二卡三卡四卡五卡| 天天揉久久久久亚洲精品| 国产精品日日摸夜夜添夜夜av| 三级视频网站在线| 欧美午夜精品久久久久久久| 污片免费在线观看| 99精品视频免费观看| 国产伦精品一区二区三区四区免费 | 972aa.com艺术欧美| 天堂8在线天堂资源bt| 中文在线综合| 久久频这里精品99香蕉| 黄色片一区二区三区| 午夜精品久久久久久久99樱桃| 麻豆精品国产传媒| 狠狠爱成人网| 国产日韩一区欧美| 一区二区三区短视频| 亚洲天堂男人天堂女人天堂| 中文字幕一区二区三区四区免费看| 欧美国产欧美亚州国产日韩mv天天看完整 | eeuss影院www在线观看| 欧美日韩精品系列| 在线观看美女av| 国产福利一区二区三区| 全黄性性激高免费视频| 日韩精品亚洲aⅴ在线影院| 欧美重口另类videos人妖| 丁香婷婷在线观看| 欧美丰满美乳xxx高潮www| 国产av 一区二区三区| 成人精品一区二区三区中文字幕 | 国产资源在线观看入口av| 亚洲精品电影网站| 国产精品sm调教免费专区| 亚洲色图.com| 久久久久久婷婷| 日韩精品三区四区| 久久久久福利视频| 一区二区三区日本久久久| 国产精品入口免费视| 人人澡人人添人人爽一区二区| 亚洲成人免费在线视频| 亚洲国产精品无码久久久| 国产精品久久久久久福利一牛影视| 超碰91在线播放| 亚洲欧美网站| 五月天色婷婷综合| 九九视频免费观看视频精品| 成人性生交大片免费看视频直播| 99re6在线精品视频免费播放| 亚洲午夜国产成人av电影男同| 91精品国产乱码久久| 亚洲成人av一区二区三区| 亚洲一级片在线播放| 成人午夜私人影院| a在线观看免费视频| 亚洲高清在线| 影音欧美亚洲| 欧洲vs亚洲vs国产| 国产专区欧美专区| 亚洲高清黄色| 久久久久久久一区二区| 香蕉视频在线看| 日韩大陆欧美高清视频区| 97av免费视频| 在线中文字幕不卡| 四虎永久在线精品| 亚洲视频免费看| 久久婷婷五月综合| 99热精品国产| 亚洲911精品成人18网站| 日韩av一区二区在线影视| 超碰成人免费在线| 久久久久久美女精品| 欧美专区一二三| 国产亚洲精品美女久久| 91色精品视频在线| av久久网站| 欧美专区国产专区| 国产资源在线观看入口av| 欧美俄罗斯乱妇| 老司机在线看片网av| 亚洲天堂网站在线观看视频| 亚洲欧美自偷自拍| 亚洲成人激情在线| 亚洲av无码国产综合专区| 91精品国产综合久久久久久久久久 | 免费在线你懂的| 宅男66日本亚洲欧美视频| 青青免费在线视频| 日韩精品高清视频| 可以免费看毛片的网站| 日韩久久久久久| www.国产免费| 日韩欧美电影一区| 国产麻豆精品一区| 91精品国产综合久久精品图片| 91国在线视频| 555www色欧美视频| 国产男男gay体育生白袜| 欧美理论电影在线| 国产麻豆免费观看| 日韩精品专区在线影院重磅| 99久久精品无免国产免费| 欧美一区二区三区免费视频| 国产精品久久久久久久免费| 欧美日韩在线播| 亚洲午夜激情视频| 69av一区二区三区| 国产哺乳奶水91在线播放| 欧美一级欧美三级在线观看| 国产后入清纯学生妹| 日韩欧美一卡二卡| 老熟妇高潮一区二区高清视频| 精品国内片67194| 日韩中文字幕观看| 国产视频自拍一区| 国产午夜精品一区理论片| 中文字幕亚洲色图| 2020国产在线视频| 久久人人爽人人| 另类激情视频| 国产免费一区二区三区香蕉精| 国产一区二区三区四区五区3d| 国产精品中文字幕久久久| 91麻豆精品国产91久久久更新资源速度超快| 成人动漫网站在线观看| jizz18欧美18| 牛人盗摄一区二区三区视频| 成人看的视频| 成年在线观看视频| 99精品久久| 亚洲va在线va天堂va偷拍| 国产伦精品一区二区三区免费迷| 韩国三级视频在线观看| 久久久亚洲精品一区二区三区 | 天天干,夜夜操| 国产香蕉97碰碰久久人人| 麻豆视频在线观看免费| 久久久久久久一区二区| 国产精成人品2018| 99porn视频在线| 国产精品亚洲人成在99www| 一区二区三区欧美在线| 亚洲福利国产| 性chinese极品按摩| 成人av资源站| 蜜桃av免费在线观看| 亚洲国产精品久久艾草纯爱| 天堂免费在线视频| 日韩女优av电影| av大片在线播放| 亚洲3p在线观看| 欧美日韩免费电影| 国模精品娜娜一二三区| 欧美高清视频在线观看mv| 欧美视频在线免费播放| 精品一区二区三区不卡| 亚洲蜜桃精久久久久久久久久久久 | 日韩一卡二卡三卡国产欧美| 性插视频在线观看| 久久亚洲影音av资源网| 韩国成人漫画| 国产精品美女诱惑| 日韩欧美高清| 丝袜老师办公室里做好紧好爽| 激情综合网av| 精品国产成人亚洲午夜福利| 亚洲国产精品视频| 国产老女人乱淫免费| 国产午夜精品视频| 涩涩涩在线视频| 99在线视频播放| 99re66热这里只有精品8| 国产男女在线观看| 国产91富婆露脸刺激对白| 开心激情五月网| 欧美亚洲丝袜传媒另类| 四虎影视精品成人| 久久久免费电影| 精品亚洲二区| 中文字幕日韩精品久久| 青青草国产成人av片免费| 成人免费看aa片| 欧美日韩精品在线观看| 亚洲xxx在线| 欧美成人性生活| 在线免费成人| 亚洲欧美日韩国产yyy| 丝袜诱惑亚洲看片| 亚洲熟妇一区二区三区| 精品久久久久久亚洲精品 | 国产**成人网毛片九色 | 午夜精品影院在线观看| 精品人妻无码一区二区色欲产成人| 色吧影院999| 国产乱子精品一区二区在线观看| 欧美日韩在线不卡一区| 亚洲男人影院| 成人午夜福利一区二区| 色综合天天综合给合国产| 日本不卡免费播放| 欧美在线一区二区三区四| 五月综合久久| 国产综合免费视频| 久久人人97超碰com| 秋霞av一区二区三区| 亚洲夜晚福利在线观看| 成人在线不卡| 波多野结衣三级在线| 国产精品一区免费在线观看| 放荡的美妇在线播放| 精品久久久影院| 97超碰免费在线| 久久人人爽爽人人爽人人片av| 久久精品天堂| 特黄一区二区三区| 884aa四虎影成人精品一区| av超碰免费在线| 国产久一道中文一区| 国产一区二区三区的电影 | 综合久久国产九一剧情麻豆| 国产美女永久免费| 欧美美女15p| 日韩激情啪啪| 国产aaaaa毛片| 亚洲人成7777| 午夜视频免费看| 国产精品久久久久久久久借妻| 欧美顶级大胆免费视频| 精品人妻人人做人人爽夜夜爽| 天天亚洲美女在线视频| 国产福利免费在线观看| 3d动漫精品啪啪一区二区三区免费| 在线国产日韩| 手机看片日韩av| 日韩一级二级三级| av资源亚洲| 男人草女人视频| 2020国产精品| 国产青青草视频| 51久久精品夜色国产麻豆| 色天天久久综合婷婷女18| 亚洲无人区码一码二码三码| 在线亚洲一区观看| 色爱综合区网| 色综合久久av| 成人性生交大合| 在线观看视频中文字幕| 97久久久免费福利网址| 亚洲精品一区二区妖精|