vue取消接口請求CancelToken


   因業務需求,需要請求多次同一接口,需要在請求接口時,取消上個未完成的接口請求

解決方案一:統一封裝

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM