console
const app = new Vue({
el: '#app',
methods: {
async handleClick() {
try {
const data = await http('https://baidu.com')
console.log(data)
} catch(e) {
console.warn(e)
}
}
}
})
let axiosMap = new Map()
const CancelToken = axios.CancelToken
function http(url) {
let cancel
axios(url, {
cancelToken: new CancelToken(function extc(c) {
cancel = c
})
})
axios.interceptors.request.use(function (config) {
console.log(axiosMap)
cancel()
if(axiosMap.has(config.url)) {
axiosMap.get(config.url)()
}
axiosMap.set(config.url, cancel)
return config;
}, function (error) {
return Promise.reject(error);
});
axios.interceptors.response.use(function (response) {
console.log(response)
axiosMap.delete(response.url)
return response;
}, function (error) {
console.log(error.config)
axiosMap.delete(error.config.url)
return Promise.reject(error);
});
}
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
<div id="app">
<button @click='handleClick'>getUser</button>
</div>