import axios from 'axios'
axios.defaults.baseURL = 'http://124.93.196.45:10001/'
const pendingRequest = new Map()
const CancelToken = axios.CancelToken;
const source = CancelToken.source();
function generateReqKey(config: any) {
const { method, url, params, data } = config
return [method, url, JSON.stringify(params), JSON.stringify(data)].join('&')
} function resGenerateReqKey(config: any) {
const { method, url, params, data } = config
return [method, url, params, data].join('&')
}
function addPendingRequest(config: any) {
const requestKey = generateReqKey(config)
console.log(requestKey, 'add');
config.cancelToken =
config.cancelToken ||
new axios.CancelToken((cancel: any) => {
if (!pendingRequest.has(requestKey)) {
pendingRequest.set(requestKey, cancel)
}
})
}
function removePendingRequest(config: any) {
const requestKey = generateReqKey(config)
if (pendingRequest.has(requestKey)) {
config.cancelToken = source.token;
source.cancel()
}
}
function clearPending() {
for (const [requestKey, cancelToken] of pendingRequest) {
cancelToken(requestKey)
}
pendingRequest.clear()
}
axios.interceptors.request.use(
function (config: any) {
if (localStorage.token) {
config.headers['Authorization'] = `Bearer ${localStorage.token}`
}
removePendingRequest(config)
addPendingRequest(config)
return config
},
(error) => {
pendingRequest.clear()
return Promise.reject(error)
}
)
axios.interceptors.response.use(
(response) => {
const requestKey = resGenerateReqKey(response.config)
pendingRequest.delete(requestKey)
if (response.data.code != 200) {
alert(response.data.msg)
}
return response
},
(error) => {
removePendingRequest(error.config || {})
if (axios.isCancel(error)) {
console.warn(error)
return Promise.reject(error)
} else {
}
return Promise.reject(error)
}
)
export default axios
export { clearPending }
console