[RN] React Native Fetch請求設置超時


一、實現思路

根據Promise.race的特性,我們在Promise.race里面添加兩個任務,一個是正常的網絡請求任務A,另外一個便是網絡延時任務B,網絡延時可以利用setTimeout方法實現。
這個時候會有三種情況出現:
1.A任務在8秒內完成(假定8秒超時),Promise.race任務正常結束。
2.超過8秒A任務仍然未完成,由B任務計時結束自動中斷Promise.race。
3.發生異常,Promise.race自動結束。
針對以上三種情況來設計網絡超時方案。

二、代碼
HttpUtil.js
 
//先定義延時函數
const delay = (timeOut = 8*1000) =>{
    return new Promise((resolve,reject) =>{
        setTimeout(() =>{
            reject(new Error('網絡超時');
        },timeOut);
    })
}

//fetch網絡請求
const fetchPromise = (method,url, formData) =>{
    return new Promise((resolve, reject) => {
        fetch(url,{
            method: method,
            body:formData
        }).then((response) => {
            if (response.ok) {
                return response.json();
            } else {
                reject(new Error('服務器異常'));
            }
        }).then((responseJson) => {
            resolve (responseJson);
        }).catch((err) => {
            reject(new Error(err);
        })
    })
}

//race任務
const _fetch = (fetchPromise, timeout) => {
    return Promise.race([fetchPromise,delay(timeout)]);
}

//post
const HttpPost = (url, formData,timeout = 8*1000)  =>{
    return _fetch(fetchPromise('POST', url, formData), timeout);
};

//get
const HttpGet = (url,timeout = 8*1000)  =>{
    return _fetch(fetchPromise('Get', url), timeout);
};

export {HttpPost ,HttpGet}
 

 

參考:

https://www.jianshu.com/p/2df7c6e3b3c3

 

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10963004.html

轉載請著名出處!謝謝~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM