前端實(shí)現(xiàn)http請(qǐng)求重試功能

需求情況比較簡(jiǎn)單: 需要在前端實(shí)現(xiàn)一個(gè)重試的功能粹污,如果一個(gè)請(qǐng)求訪問出錯(cuò)(不管是后端服務(wù)出錯(cuò)還是網(wǎng)絡(luò)出錯(cuò),亦或者是請(qǐng)求的結(jié)果不符合預(yù)期)均可進(jìn)行自動(dòng)重試

直接上代碼

<!DOCTYPE html>

<html>

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script>

//最大重試次數(shù)
const MAX_RETRY = 3
//請(qǐng)求超時(shí)時(shí)間
const REQUEST_TIMEOUT = 15 * 1000
// 重試間隔500ms
const RETRY_INTERVAL = 500 

function sleep(ms){
  return new Promise((resolve)=>setTimeout(resolve,ms));
}


async function request(url,method,params,retry = MAX_RETRY,hookResult = null){

    let res 
    let requireRetry
    try {
        //構(gòu)造請(qǐng)求的參數(shù)
        let config = {
            url: url,
            method: method,
            timeout: REQUEST_TIMEOUT
        }
        if(Object.is(method,'get')){
            config['params'] = params
        }else if (Object.is(method,"post")){
            config['data'] = params
        }
        res = await axios.request(config)
        //發(fā)生服務(wù)器錯(cuò)誤,重試
        if (res && res.status > 500){
            console.log('返回的狀態(tài)碼:', res.status)
            requiretRetry = true
        } 
        //使用調(diào)用者邏輯判斷馅而,如果未達(dá)到期許,重試
        if (hookResult && !hookResult(res)){
            console.log('hookResult函數(shù)返回為false,需要重試')
            requiretRetry = true
        }
    }catch(err){
        console.log(err)
        // 發(fā)生網(wǎng)絡(luò)錯(cuò)誤宴倍,重試
        requireRetry = true
    }
    if (requireRetry && retry > 0){
        // 500ms之后重試
        await sleep(RETRY_INTERVAL)
        console.log('重試', retry)
        res = await request(url, method, params, --retry, hookResult)
    }

    return res
}

//use example

async function test()
{
    let res =await request("https://www.baidu.com/s","get",{"wd":"hello"})
    console.log("result is : " , res)
}



</script>


<body >  
    
    <button type="button" onclick="test()">Click Me!</button>


</body>



</html>


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末张症,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鸵贬,更是在濱河造成了極大的恐慌俗他,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阔逼,死亡現(xiàn)場(chǎng)離奇詭異兆衅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嗜浮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門羡亩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人周伦,你說我怎么就攤上這事夕春∥椿模” “怎么了专挪?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長片排。 經(jīng)常有香客問我寨腔,道長,這世上最難降的妖魔是什么率寡? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任迫卢,我火速辦了婚禮,結(jié)果婚禮上冶共,老公的妹妹穿的比我還像新娘乾蛤。我一直安慰自己,他們只是感情好捅僵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布家卖。 她就那樣靜靜地躺著,像睡著了一般庙楚。 火紅的嫁衣襯著肌膚如雪上荡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天馒闷,我揣著相機(jī)與錄音酪捡,去河邊找鬼。 笑死纳账,一個(gè)胖子當(dāng)著我的面吹牛逛薇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疏虫,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼永罚,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼帅涂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尤蛮,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤媳友,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后产捞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體醇锚,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年坯临,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焊唬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡看靠,死狀恐怖赶促,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挟炬,我是刑警寧澤鸥滨,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站谤祖,受9級(jí)特大地震影響婿滓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粥喜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一凸主、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧额湘,春花似錦卿吐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至供置,卻和暖如春谨湘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芥丧。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工紧阔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人续担。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓擅耽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親物遇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乖仇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 2系列200 OK請(qǐng)求已成功憾儒,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回。201 Created請(qǐng)求已經(jīng)被實(shí)現(xiàn)乃沙,而且...
    Y像夢(mèng)一樣自由閱讀 3,575評(píng)論 1 5
  • Getting Started Burp Suite 是用于攻擊web 應(yīng)用程序的集成平臺(tái)起趾。它包含了許多工具,并為...
    Eva_chenx閱讀 28,683評(píng)論 0 14
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí)警儒,會(huì)觸發(fā)此異常训裆。 O...
    我想起個(gè)好名字閱讀 5,307評(píng)論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 空有文昌夢(mèng), 難能做棟梁蜀铲。 知命難違抗边琉, 未敢恨上蒼。 慷慨向關(guān)外记劝, 沙場(chǎng)伴胡楊变姨。 百折千悴后, 氣骨半成鋼厌丑。 干...
    一時(shí)浮華染流年閱讀 288評(píng)論 0 0