日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

axios关于针对请求时长策略设计的思考

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 axios关于针对请求时长策略设计的思考 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在我們的業(yè)務(wù)請(qǐng)求中,有很多時(shí)候會(huì)針對(duì)有不同時(shí)長的需求策略性設(shè)置。這里針對(duì)這個(gè)需求進(jìn)行詳細(xì)的展開。

針對(duì)這種情況,我們的timout的一般是根據(jù)請(qǐng)求地址來的,所以核心處理技巧便是如何根據(jù)不同的request地址去設(shè)置不同的timeout.

我們之前設(shè)置的請(qǐng)求時(shí)長是十秒,并且是通過create的部分,整個(gè)項(xiàng)目只有一個(gè)instance的。

let _axios = axios.create({baseURL: apiProxyUrl,headers: { 'Content-Type': 'application/json' },transformRequest: [transformRequest],timeout: 10000 }) 復(fù)制代碼

那么既然需要處理request的地址部分,我建議針對(duì)長時(shí)長的地址單獨(dú)一個(gè)文件維護(hù),考慮到了以下兩點(diǎn):

1 請(qǐng)求地址變多時(shí),可以更好的定位以及維護(hù) 2 需要時(shí),可以針對(duì)不同的微服務(wù)進(jìn)行進(jìn)一步的管理和配置 3 與下面請(qǐng)求時(shí)長的策略部分進(jìn)行解耦 復(fù)制代碼

主要結(jié)果是返回一個(gè)期望長時(shí)長地址的數(shù)組。

/*** @author robin* @description maintain all long time api request paths*//*** 用戶服務(wù)長時(shí)長地址數(shù)組*/ const userApiPaths = [] /*** 報(bào)表服務(wù)長時(shí)長地址數(shù)組,如果你的微服務(wù)地址符合一個(gè)規(guī)律,可以這里進(jìn)行方法定義并返回*/ const getTablesApiPaths = ()=>{return [] }export default ['/house/list/houseSpaceInHouseSpaceManager' ].concat(userApiPaths).concat(getTablesApiPaths()) 復(fù)制代碼

簡單處理

我們知道axios本身的request支持?jǐn)r截器的配置,那么我們可以進(jìn)行以下簡單的設(shè)置。

import longTimeApiEnum from './longTimeApiEnum' // 請(qǐng)求攔截器 _axios.interceptors.request.use((config) => { // 請(qǐng)求時(shí)長10分鐘const LONG_TIMEOUT = 600000 if (longTimeApiEnum.some(url => config.url.includes(url))) {config.timeout = LONG_TIMEOUT}return config }) 復(fù)制代碼

此方法適用于大部分請(qǐng)求地址沒有規(guī)律性,適合用枚舉維護(hù)相應(yīng)地址的。

策略模式處理

當(dāng)然如果你的長時(shí)長的api地址具有一定的正則可匹配性,也可以用正則來寫,并且把判斷的部分用策略模式獨(dú)立為一個(gè)方法,甚至一個(gè)文件。

比如下面的例子:

// 根據(jù)微服務(wù)一級(jí)地址判斷 function judgeIsLongTimeApi(url){const strategy = {'user':function(url){if(url.includes('/users/data')) return true;return false},'table':function(url){if(url.includes('/table')) return true;return false}}const firstPath = url.split('/')[1];return strategy[firstPath] && strategy[firstPath](url);}// 使用 const LONG_TIMEOUT = 600000 if (judgeIsLongTimeApi(config.url)) {config.timeout = LONG_TIMEOUT} 復(fù)制代碼

復(fù)雜的類處理

感覺上面的方式不夠逼格,或者有時(shí)候不是這么簡單的改一個(gè)timeout,還需要改很多配置,比如說baseUrl等等。那么你需要定義一個(gè)class。然后根據(jù)你的需求去自定義每個(gè)子類。大概是這樣的:這里用到了class繼承。

import axios from 'axios'; class Api{constructor(){}nessaryFn(){throw Error('必須要實(shí)現(xiàn)的函數(shù)')}}class usualApi extends Api {constructor(){}nessaryFn(){//codes here} }class specialApi extends Api {constructor(){}nessaryFn(){//codes here} }// 再來一個(gè)策略模式 根據(jù)不同的情況 ,返回使用不同的api實(shí)現(xiàn)子類。復(fù)制代碼

小結(jié)

以上就是全部的關(guān)于axios部分的自定義維護(hù)時(shí)做的思考和實(shí)踐,已經(jīng)完整的解決了自己的需求。

其他問題

  • 當(dāng)axios的請(qǐng)求返回類型為非json類型,需要針對(duì)url進(jìn)行特殊化配置的時(shí)候,相應(yīng)的思路也是如此。if (exportXlsEnum.some(url => config.url.includes(url))) { config.responseType = 'blob' } 復(fù)制代碼

轉(zhuǎn)載于:https://juejin.im/post/5c95d481f265da60e65b9c66

總結(jié)

以上是生活随笔為你收集整理的axios关于针对请求时长策略设计的思考的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。