转载转载转载
补充了详细注释
设置超时重发时间/重试次数限制,重新请求间隔
import axios from 'axios';
// 重新发起请求的参数
axios.defaults.retry = 20;
axios.defaults.retryDelay = 6000;
export const timeOutRequest = axios.create({
baseURL: ***,
timeout: 10 * 1000,
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
});// 给axios添加拦截器,请求错误/超时时执行相应处理操作
timeOutRequest.interceptors.response.use(undefined, err => {
const config = err.config;
if (!config || !config.retry) return Promise.reject(err);
// 手动给config添加当前重试次数的属性
config.__retryCount = config.__retryCount || 0;
// 达到上限时reject
if (config.__retryCount >= config.retry) {
return Promise.reject(err);
}
// 重试次数+1
config.__retryCount += 1;
// 定时器在达到重试间隔时resolve往下执行
const backoff = new Promise(resolve => {
setTimeout(() => {
resolve();
}, config.retryDelay || 1);
});
// 返回一个promise,在定时器结束后重新调用timeOutRequest(config)发起请求,timeOutRequest之前创建的实例
return backoff.then(() => timeOutRequest(config));
});版权声明:本文为Gjgjsyy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。