因業務需求,需要請求多次同一接口,需要在請求接口時,取消上個未完成的接口請求
解決方案一:統一封裝
1. 可以利用CancelToken
工廠函數創建cancel token
const CancelToken = axios.CancelToken; const source = CancelToken.source(); // get 方法使用案例 axios.get('user/12345', { cancelToken: source.token }).catch(function(thrown) { if (axios.isCancel(thrown)) { console.log('Request canceled', thrown.message) } else { // TODO: handle error } }) // post 使用案例 axios.post('/user/12345', { name: 'name what' }, { cancelToken: source.token }) // 執行取消請求操作 source.cancel(‘請求已取消’)
解決方案二:單個接口處理
1、api處理
export function getSelfCollectionResourceList(data,_this) { return request({ url: "/xxxx/xxx/xxxx", method: "POST", data, cancelToken: new axios.CancelToken((c) => { _this.cancelFun = c }), }); }
2、vue調用處理
export default { data(){ return { cancelFun :null, } }, method:{ cancelRequest() { if (typeof this.cancelFun === 'function') { this.cancelFun() } }, getSelfCollectionResource() { this.cancelRequest(); getSelfCollectionResourceList({ xxx:xxxx },this).then(res => { this.total = res.result.totalNum; this.resList = res.result.list; }); }, } }
問題,按照上述寫法,並未出現pending狀態的接口請求
參考:https://www.jianshu.com/p/1662e2524c64