封装拦截器
添加请求拦截器
axios.interceptors.request.use(function (config) {
return config;
}, function (error) {
return Promise.reject(error);
});
axios.interceptors.response.use(function (response) {
return response;
}, function (error) {
return Promise.reject(error);
});
# axios请求失败后发起二次请求
import axios from 'axios'
axios.defaults.retry = 1
axios.defaults.retryDelay = 1000
axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
let config = err.config;
if (!config || !config.retry) return Promise.reject(err);
config.__retryCount = config.__retryCount || 0;
if (config.__retryCount >= config.retry) {
return Promise.reject(err);
}
config.__retryCount += 1;
let backoff = new Promise(function (resolve) {
setTimeout(function () {
resolve(); }, config.retryDelay || 1);
});
return backoff.then(function () {
return axios(config);
});
});
export default axios;
axios 放置重复请求
import axios from "axios";
const http = axios.create({
baseURL: process.env.VUE_APP_BASE_URL,
});
let httplist = []
const removeHttp = config => {
let index = httplist.findIndex(v => v.url === config.url && v.method === config.method)
if (index >= 0) {
httplist[index].controller.abort()
httplist.splice(index, 1)
} }
http.interceptors.request.use(
function (config) {
removeHttp(config)
const controller = new AbortController()
config.signal = controller.signal
config.controller = controller
httplist.push({ ...config })
return config
},
function (error) {
return Promise.reject(error)
}
)
http.interceptors.response.use(
function (response) {
const { data } = response;
return data; }, function (error) {
return Promise.reject(error);
}
);