美文网首页
axios cancel

axios cancel

作者: 湘兰沅芷 | 来源:发表于2023-08-01 20:14 被阅读0次
import axios from 'axios'
import { AxiosResponse, AxiosRequestConfig } from 'axios';
import { Notification, Message } from '@arco-design/web-react'
// import Cookies from 'js-cookie'
// const moduleType = location.href.split('console/')[1]?.split('/')[0] || 'tenant'
let lastRequest = null;
const CancelToken = axios.CancelToken;
const source = CancelToken.source();

const service = axios.create({
  withCredentials: true,
  baseURL: `/api`,
  timeout: 60000, // request timeout
  cancelToken: source.token
})
service.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    config.headers['x-auth-validate'] = config.data?.headers?.['x-auth-validate'] || 'true'

    if (lastRequest && lastRequest.url === config.url && lastRequest.method === config.method && JSON.stringify(lastRequest.params) === JSON.stringify(config.params)) {
      // 如果相同,则取消当前请求
      return Promise.reject(new Error('Duplicate Request'));
    }
    
    // 保存当前请求的信息
    lastRequest = {
      url: config.url,
      method: config.method,
      params: config.params
    };
    return config
  },
  error => {
    console.log(error) // for debug
    return Promise.reject(error)
  }
)
service.interceptors.response.use(
  (response: AxiosResponse) => {
    const res = response.data;
    if (res.code.toLocaleLowerCase() !== 'success') {
      if (res.msg) {
        Message.error({
          content: res.msg || 'Error',
          duration: 3000
        });
      }
      return Promise.reject(res)
    } else {
      return res
    }
  },
  error => {
    let code = 0
    try {
      code = error.response.data.status ? error.response.data.status : error.response.status
    } catch (e) {
      if (error.toString().indexOf('Error: timeout') !== -1) {
        Notification.error({
          title: '网络请求超时',
          content: '',
          duration: 5000
        })
        return Promise.reject(error)
      }
    }
    const errorMsg =
      error.response.data?.message ||
      error.response.data?.msg ||
      error.response.data
    if (code && (code === 401 || code === 402)) {
      window.location.href = `${error.response.data.data.content}?redirect_uri=${encodeURIComponent(window.location.href)}`;
    } else if (code && code === 403) {
      Message.error(errorMsg)
    } else {
      throw new Error(`接口请求异常${code}:${errorMsg}`)
    }
    return Promise.reject(error)
  }
)
export default service

0802.png

相关文章

网友评论

      本文标题:axios cancel

      本文链接:https://www.haomeiwen.com/subject/dolupdtx.html