axios 请求超时处理方法

40 篇文章 3 订阅

main.js

import Axios from 'axios'


Axios.defaults.timeout = 10000;//设置超时时间,单位毫秒
Axios.defaults.retry = 3; //设置全局请求次数
Axios.defaults.retryDelay = 1000;//设置全局请求间隙


// http 响应拦截器
Axios.interceptors.response.use((response) => {
  var token = response.headers.authorization;
  if (token) {
    store.dispatch('ActionLogin', token);
  }
  // var code = response.data.code;
  return response
}, error => {
  if (error.response) {
    Toast.clear();
    switch (error.response.status) {
      case 1001:
        // 清除token信息并跳转到登录页面
        store.dispatch('ActionExit');
        Dialog.alert({
          title: '登录提示',
          message: '登录信息已失效,请重新登录',
        }).then(() => {
          router.replace({
            path: '/WxLogin',
            query: { redirect: router.currentRoute.fullPath }
          })
        });
        break
    }
  }
  //超时处理
  var config = error.config;
  if (!config || !config.retry) return Promise.reject(error);
  // 设置用于跟踪重试次数的变量
  config.__retryCount = config.__retryCount || 0;

  // 检查我们是否已将重试总数最大化
  if (config.__retryCount >= config.retry) {
    // 错误拒绝
    return Promise.reject(error);
  }

  // 增加重试次数
  config.__retryCount += 1;

  // 创造新的承诺来处理指数退避
  var backoff = new Promise(function (resolve) {
    setTimeout(function () {
      resolve();
    }, config.retryDelay || 1);
  });

  // 返回承诺,其中将撤回axios以重试请求
  return backoff.then(function () {
    return Axios(config);
  });
  // return Promise.reject(error)
})

重点是:

//超时处理
  var config = error.config;
  if (!config || !config.retry) return Promise.reject(error);
  // 设置用于跟踪重试次数的变量
  config.__retryCount = config.__retryCount || 0;

  // 检查我们是否已将重试总数最大化
  if (config.__retryCount >= config.retry) {
    // 错误拒绝
    return Promise.reject(error);
  }

  // 增加重试次数
  config.__retryCount += 1;

  // 创造新的承诺来处理指数退避
  var backoff = new Promise(function (resolve) {
    setTimeout(function () {
      resolve();
    }, config.retryDelay || 1);
  });

  // 返回承诺,其中将撤回axios以重试请求
  return backoff.then(function () {
    return Axios(config);
  });

参考链接:axios 设置接口retry次数与间隔时间 - echolife - 博客园

对于axios请求超时处理,可以通过以下几个步骤来实现: 1. 创建一个axios实例,并在实例设置请求超时时间timeout。可以使用axios的defaults属性来设置全局默认值。例如,可以将timeout设置为6000毫秒,即6秒:axios.defaults.timeout = 6000; 2. 当请求超时时,可以通过设置axios的retry属性来进行重新请求。retry属性表示请求失败后的重试次数。例如,可以将retry设置为3次:axios.defaults.retry = 3; 3. 为了避免频繁的重试请求,可以设置一个请求间隔retryDelay。retryDelay表示两次请求之间的时间间隔。例如,可以将retryDelay设置为1000毫秒,即1秒:axios.defaults.retryDelay = 1000; 通过以上步骤,就可以实现axios请求超时处理。当请求超时时,axios会自动进行重新请求,直到达到重试次数或请求成功为止。这样可以提高请求的稳定性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [axios请求超时,设置重新请求的完美解决方法](https://blog.csdn.net/weixin_34228662/article/details/91377463)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue axios请求超时的正确处理方法](https://download.csdn.net/download/weixin_38709466/12761674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [axios请求失败、请求超时重新发送请求](https://blog.csdn.net/weixin_47437528/article/details/128035261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余温无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值