news 2026/5/5 7:58:28

axios-retry配置详解:10个核心选项提升应用稳定性

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
axios-retry配置详解:10个核心选项提升应用稳定性

axios-retry配置详解:10个核心选项提升应用稳定性

【免费下载链接】axios-retryAxios plugin that intercepts failed requests and retries them whenever possible项目地址: https://gitcode.com/gh_mirrors/ax/axios-retry

axios-retry是一个功能强大的Axios插件,能够自动拦截失败的请求并在可能的情况下重试它们,有效提升应用的稳定性和可靠性。无论是处理网络波动、服务器过载还是临时错误,合理配置axios-retry都能显著改善用户体验。

快速入门:基础安装与配置

要开始使用axios-retry,首先需要通过npm安装该插件:

npm install axios-retry

基础配置只需几行代码即可实现请求重试功能:

import axios from 'axios'; import axiosRetry from 'axios-retry'; // 应用默认配置 axiosRetry(axios, { retries: 3, // 重试次数 retryDelay: axiosRetry.exponentialDelay // 指数退避策略 }); // 发送请求 axios.get('https://api.example.com/data') .then(response => console.log(response.data)) .catch(error => console.error('请求失败:', error));

核心配置选项详解

1. retries:控制重试次数

retries选项定义了请求失败后的最大重试次数,默认值为3次。根据API的稳定性和重要性,可以适当调整这一数值:

// 重要数据请求增加重试次数 axiosRetry(axios, { retries: 5 // 最多重试5次 });

最佳实践:对于非关键数据,保持默认3次重试;对于重要交易或数据同步,可增加到5次。

2. retryCondition:自定义重试条件

retryCondition是一个函数,用于判断请求是否应该被重试。默认情况下,axios-retry会重试网络错误或5xx状态码的幂等请求(GET、HEAD、OPTIONS、PUT或DELETE)。

自定义重试条件示例:

// 仅重试429和5xx状态码的请求 axiosRetry(axios, { retryCondition: (error) => { return error.response && (error.response.status === 429 || (error.response.status >= 500 && error.response.status <= 599)); } });

相关源码定义可查看 src/index.ts。

3. retryDelay:控制重试延迟策略

retryDelay函数用于计算两次重试之间的延迟时间,支持多种策略:

  • 无延迟:默认策略,立即重试
  • 指数退避:延迟时间随重试次数指数增长
  • 线性延迟:延迟时间随重试次数线性增长
  • 自定义延迟:根据需求完全自定义
// 指数退避策略(推荐) axiosRetry(axios, { retryDelay: axiosRetry.exponentialDelay }); // 线性延迟策略 axiosRetry(axios, { retryDelay: axiosRetry.linearDelay(1000) // 每次重试增加1秒延迟 }); // 自定义延迟策略 axiosRetry(axios, { retryDelay: (retryCount, error) => { // 从响应头获取重试延迟(如429状态码的Retry-After头) const retryAfter = error.response?.headers['retry-after']; return retryAfter ? parseInt(retryAfter) * 1000 : retryCount * 1000; } });

指数退避策略的实现可查看 src/index.ts。

4. shouldResetTimeout:重置超时时间

shouldResetTimeout选项控制是否在重试时重置超时时间,默认值为false。设置为true时,每次重试都会使用原始超时时间:

axiosRetry(axios, { shouldResetTimeout: true, // 重置超时时间 timeout: 5000 // 每次重试都有5秒超时 });

5. onRetry:重试回调函数

onRetry回调函数在每次重试前被调用,可以用于记录日志、更新UI状态或修改请求配置:

axiosRetry(axios, { onRetry: (retryCount, error, config) => { console.log(`第${retryCount}次重试请求: ${config.url}`); // 可以在这里修改请求配置,如更新认证令牌 config.headers['Authorization'] = `Bearer ${getNewToken()}`; } });

6. onMaxRetryTimesExceeded:最大重试次数超限回调

当所有重试尝试都失败后,onMaxRetryTimesExceeded回调函数会被调用,可用于执行最终的错误处理逻辑:

axiosRetry(axios, { onMaxRetryTimesExceeded: (error, retryCount) => { console.error(`已达到最大重试次数(${retryCount}),请求失败:`, error.message); // 可以在这里触发告警或 fallback 机制 sendErrorReport(error); } });

7. validateResponse:自定义响应验证

validateResponse函数允许你自定义什么情况下的响应被视为成功,覆盖Axios默认的2xx状态码验证:

axiosRetry(axios, { validateResponse: (response) => { // 认为2xx和404状态码都是成功响应 return response.status >= 200 && response.status < 300 || response.status === 404; } });

8. 每请求单独配置

除了全局配置外,还可以为单个请求设置独立的重试配置,这会覆盖全局配置:

axios.get('https://api.example.com/data', { 'axios-retry': { retries: 2, // 此请求仅重试2次 retryDelay: axiosRetry.linearDelay(500) } });

9. 取消请求的重试控制

axios-retry默认不会重试被取消的请求(错误码为ERR_CANCELED)。如果你需要重试被取消的请求,可以自定义retryCondition:

axiosRetry(axios, { retryCondition: (error) => { // 即使请求被取消也重试 return error.code === 'ERR_CANCELED' || axiosRetry.isNetworkOrIdempotentRequestError(error); } });

10. 幂等性请求判断

axios-retry默认只对幂等性请求(GET、HEAD、OPTIONS、PUT、DELETE)进行重试,以避免重复提交数据。可以通过isIdempotentRequestError函数判断请求是否为幂等性请求:

import axiosRetry from 'axios-retry'; if (axiosRetry.isIdempotentRequestError(error)) { console.log('这是一个幂等性请求,可以安全重试'); }

相关实现可查看 src/index.ts。

高级使用技巧

结合退避策略的最佳实践

推荐使用指数退避策略(exponentialDelay),它会根据重试次数自动增加延迟时间,并添加随机抖动以避免请求风暴:

// 自定义指数退避参数 axiosRetry(axios, { retryDelay: (retryCount) => { return axiosRetry.exponentialDelay(retryCount, undefined, 300); // 基础延迟300ms } });

处理429 Too Many Requests

当API返回429状态码时,通常会在响应头中包含Retry-After字段,指示何时可以重试请求。axios-retry的retryAfter函数可以解析这个头信息:

axiosRetry(axios, { retryDelay: (retryCount, error) => { return axiosRetry.retryAfter(error) || retryCount * 1000; } });

记录和监控重试行为

通过onRetry回调可以实现详细的重试日志记录,帮助分析和优化API请求:

axiosRetry(axios, { onRetry: (retryCount, error, config) => { const logData = { timestamp: new Date().toISOString(), retryCount, url: config.url, method: config.method, error: error.message, status: error.response?.status }; console.log('请求重试:', logData); // 可以发送到监控系统 // monitorClient.send('request_retry', logData); } });

常见问题解答

Q: 为什么我的POST请求没有被重试?

A: 默认情况下,axios-retry不会重试POST请求,因为POST通常是非幂等性的(多次执行可能产生不同结果)。如果确定你的POST请求是幂等的,可以自定义retryCondition:

axiosRetry(axios, { retryCondition: (error) => { return error.config.method === 'post' && axiosRetry.isRetryableError(error); } });

Q: 如何禁用特定请求的重试?

A: 在请求配置中设置retries: 0即可禁用该请求的重试:

axios.post('/api/submit', data, { 'axios-retry': { retries: 0 } });

Q: 重试时会保留原始请求的所有配置吗?

A: 是的,axios-retry会保留原始请求的所有配置,包括 headers、data 等。如果需要修改重试请求的配置,可以在onRetry回调中进行。

总结

axios-retry提供了丰富的配置选项,可以根据不同的应用场景和需求进行灵活调整。通过合理配置retries、retryCondition、retryDelay等核心选项,能够有效提升应用的稳定性和可靠性,减少因网络波动或服务器临时错误导致的失败。

无论是简单的默认配置还是复杂的自定义策略,axios-retry都能帮助你构建更健壮的网络请求系统。开始使用axios-retry,为你的应用添加一层可靠的请求保障吧!

【免费下载链接】axios-retryAxios plugin that intercepts failed requests and retries them whenever possible项目地址: https://gitcode.com/gh_mirrors/ax/axios-retry

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 7:58:27

DARTH-PUM混合内存计算架构解析与性能优化

1. DARTH-PUM架构概述&#xff1a;突破冯诺依曼瓶颈的混合内存计算方案DARTH-PUM代表了一种革命性的混合内存计算架构&#xff0c;其核心设计理念是通过在存储单元内部直接执行计算操作&#xff0c;从根本上解决传统计算架构中"内存墙"问题。在传统冯诺依曼架构中&am…

作者头像 李华
网站建设 2026/5/5 7:49:28

自监督学习:mirrors/unsloth/llama-3-8b-bnb-4bit预训练目标函数解析

自监督学习&#xff1a;mirrors/unsloth/llama-3-8b-bnb-4bit预训练目标函数解析 【免费下载链接】llama-3-8b-bnb-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/llama-3-8b-bnb-4bit 自监督学习是现代自然语言处理的核心技术之一&#xff0c;而mirrors/…

作者头像 李华
网站建设 2026/5/5 7:47:31

GPT-4V视觉能力实战评估:零样本检测、混合架构与避坑指南

1. 项目概述&#xff1a;当开源数据集遇上视觉大模型 最近在折腾一些计算机视觉相关的项目&#xff0c;发现了一个特别有意思的GitHub仓库&#xff1a; roboflow/awesome-openai-vision-api-experiments 。这个项目&#xff0c;简单来说&#xff0c;就是Roboflow团队用他们自…

作者头像 李华
网站建设 2026/5/5 7:47:29

Seraphine:基于LCU API的英雄联盟终极智能辅助工具完整指南

Seraphine&#xff1a;基于LCU API的英雄联盟终极智能辅助工具完整指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine Seraphine是一款专为英雄联盟玩家设计的开源智能辅助工具&#xff0c;通过官方LCU API深…

作者头像 李华
网站建设 2026/5/5 7:46:28

软考高项备考:别再死记硬背!用这6个生活化故事搞定进度管理ITTO

软考高项备考&#xff1a;用6个生活场景轻松攻克进度管理ITTO 备考软考高项的朋友们&#xff0c;是否曾被进度管理那堆晦涩的ITTO&#xff08;输入、工具技术、输出&#xff09;折磨得头昏脑涨&#xff1f;今天我们不背口诀、不啃教材&#xff0c;而是用6个你每天都会遇到的生活…

作者头像 李华
网站建设 2026/5/5 7:38:31

SPWM 与 SVPWM (零序分量法实现) 电压利用率简谈

一、电压利用率是什么1.1 电压分析根据上图所示的连接方式&#xff0c;可以分析端电压 当控制 M1 的占空比为 100% 时&#xff0c;端电压 当控制 M1 的占空比为 50% 时&#xff0c;端电压 当控制 M1 的占空比为 0% 时&#xff0c;端电压 1.2 电压利用率是什么电压利用率的定义&…

作者头像 李华