文档
import axios from 'axios';
const request: AxiosInstance = axios.create({
timeout: 1000 * 10 * 3,
baseURL: '/api',
withCredentials: true,
});
const default_retryTimes = 2;
const default_retryDelay = 1000 * 3;
const MAX_COUNT = 5;
const requestQueue = [];
let activeCount = 0;
function processQueue() {
if (activeCount < MAX_COUNT && requestQueue.length) {
const { config, retryTimes, retryDelay, resolve, reject } = requestQueue.shift();
activeCount++;
request(config)
.then(response => {
resolve(response);
})
.catch(error => {
if (retryTimes === 0) {
reject(error);
} else {
setTimeout(() => {
requestQueue.push({ config, retryTimes: retryTimes - 1, retryDelay, resolve, reject });
}, retryDelay);
}
})
.finally(() => {
activeCount--;
processQueue();
});
}
}
function requestHandler(config, retryTimes = default_retryTimes, retryDelay = default_retryDelay) {
return new Promise((resolve, reject) => {
requestQueue.push({ config, retryTimes, retryDelay, resolve, reject });
processQueue();
});
}
request.get = (url, config) => {
return requestHandler({ url, method: 'get', ...config });
};
request.post = (url, data, config) => {
return requestHandler({ url, method: 'post', data, ...config });
};
export { request };
参考