axios 基于拦截器的取消(重复)请求
axios.interceptors.request.use((config) => {
if (typeof cancel === 'function') {
cancel('取消请求')
}
config.cancelToken = new axios.CancelToken(function executor(c) {
cancel = c
})
return config
})
axios.interceptors.response.use(
response => {
cancel = null
return response
},
error => {
if (axios.isCancel(error)) {
console.log('请求取消的错误', error.message)
return new Promise(() => {})
} else {
cancel = null
return Promise.reject(error)
}
}
)
let cancel
function getApp1 () {
axios({
url: 'http://localhost:3000/app1',
}).then(
response => {
console.log('app1 成功请求', response.data)
},
error => {
console.log(error.message)
}
)
}
function getApp2 () {
axios({
url: 'http://localhost:3000/app2',
}).then(
response => {
console.log('app2 成功请求', response.data)
},
error => {
console.log(error.message)
}
)
}
function cancelRequest () {
if (typeof cancel === 'function') {
cancel('取消请求')
}
}