import { defineComponent } from 'vue';
import axios, { AxiosRequestConfig, AxiosResponse } from 'guoguo-ts-axios/src';
export default defineComponent({
name: 'test-withCredentials',
setup() {
axios.interceptors.response.use(null as any, err => {
const config = err.config;
if (!config || !config.retryTimes) {
return Promise.reject(err);
}
const { __retryCount = 0, retryTimes = 0, retryDelay = 3000 } = config;
config.__retryCount = __retryCount;
if (__retryCount >= retryTimes) {
return Promise.reject(err);
}
config.__retryCount++;
const delay = new Promise(resolve => {
setTimeout(resolve, retryDelay);
});
return delay.then(function () {
return axios(config);
});
});
function retryAdapterEnhancer(adapter, options) {
const { times = 0, delay = 300 } = options;
return async (config:AxiosRequestConfig) => {
const { retryTimes = times, retryDelay = delay } = config;
let __retryCount = 0;
const request = async ():Promise<AxiosResponse> => {
try {
return await adapter(config);
} catch (err) {
if (!retryTimes || __retryCount >= retryTimes) {
return Promise.reject(err);
}
__retryCount++;
const delay = new Promise(resolve => {
setTimeout(resolve, retryDelay);
});
return delay.then(() => {
return request();
});
}
};
return request();
};
}
axios({
url: 'api/axios/base/get',
params: { a: 1 },
timeout: 200,
retryTimes: 3,
adapter: retryAdapterEnhancer(axios.defaults.adapter, {
times: 3,
delay: 3000,
}),
}).then(res => {
console.log(res);
});
return {};
},
render() {
return <div>test-retry</div>;
},
});