admin后台--axios取消重复的请求

// 同一接口请求再次请求时取消上一次请求
// 1. 定义一个空数组 存每次请求的路径和方法 
const _cancelArr = []
export const cancelAll = () => {
  _cancelArr.filter(item => {
    item.fn()
    return false
  })
}

// axios 请求拦截器
service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      if (isCheckTimeOut()) {
        store.dispatch('user/logout')
        router.push('/login')
        return Promise.reject(new Error('token超时了'))
      }
      config.headers['Authorization'] = `Bearer ${store.getters.token}`
    }

    // 3. 请求调用同样的方法时,取消上一次请求
    _cancelArr.filter(item => {
      if (item.url === config.url && item.method === config.method) {
        item.fn()
        return false
      }
      return true
    })
  // 2. 每次请求的时候把请求添加到数组中
    config.cancelToken = new Axios.CancelToken(cancel => {
      // cancel方法
      _cancelArr.push({
        url: config.url,
        method: config.method,
        fn: cancel
      })
    })
    return config
  },
  error => {
    console.log(error) // for debug
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)
路由切换时,取消上一个页面所有请求
import { cancelAll } from '@/utils/request'
router.beforeEach(()=>{
cancelAll()
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值