遇到问题:
1.多次重复请求浪费资源
2.切换标签之前未完成的请求或许会影响当前标签内容
取消重复请求:
保存一个请求的对象,重复url直接CancelToken
class httpRequest {
constructor() {
this.pending = {}
}
interceptors(instance, url) {
instance.interceptors.request.use(
config => {
const key = config.baseURL + config.url + '&' + config.method
config.cancelToken = new Axios.CancelToken((cancel) => {
this.pending[key] = cancel
})
this.handlePending(key, true)
return config
},
)
instance.interceptors.response.use(
res => {
const key = res.config.url + '&' + res.config.method
this.handlePending(key)
return res
}
)
}
handlePending(key, isRequest = false) {
if (this.pending[key] && isRequest) {
this.pending[key]('cancel repeat')
}
if (this.pending[key]) {
delete this.pending[key]
}
}
}
export default httpRequest