javascript可实现不依赖第三方库的接口请求自动重试,核心包括错误捕获、可重试判断、延迟重发、次数限制与退避策略;支持自定义重试条件、abortcontroller超时取消及日志监控。

JavaScript 实现接口请求失败时的自动重试,核心是捕获错误、判断是否可重试、延迟后重新发起请求,并控制重试次数和退避策略。不依赖第三方库也能轻松实现,关键在于合理封装异步逻辑。
基础重试函数(带次数限制)
用 async/await 封装 fetch 请求,手动捕获异常并循环重试:
- 每次失败后用
setTimeout延迟再试,避免瞬间刷爆请求 - 设置最大重试次数(如 3 次),防止无限循环
- 成功则返回响应;超次失败则抛出最终错误
async function fetchWithRetry(url, options = {}, maxRetries = 3) {
for (let i = 0; i setTimeout(resolve, 1000 * (i + 1))); // 指数退避:1s, 2s, 3s
}
}
}
支持自定义重试条件
不是所有错误都值得重试(比如 401 或 404)。可传入判断函数,只对网络抖动、502/503/504 等临时性错误重试:
- 检查
err.name === 'TypeError'(常见于网络中断) - 或解析响应状态码,仅对 5xx 或超时类错误重试
- 把重试判定逻辑抽成参数,提升复用性
const shouldRetry = (err, res) => {
if (err.name === 'TypeError') return true; // 网络异常
if (res && [502, 503, 504].includes(res.status)) return true;
return false;
};
结合 AbortController 实现超时与取消
防止某次请求卡死导致重试阻塞。每次重试都新建 AbortController,并设单次请求超时:
- 在
fetch的options.signal中传入 controller.signal - 用
setTimeout调用controller.abort() - 捕获
AbortError并视为可重试错误
生产环境建议加简单日志和监控
便于排查问题,比如记录重试次数、耗时、最终状态:
- 首次请求失败时打 warn 日志:“Request failed, will retry (1/3)”
- 最终成功时 log “Request succeeded after 2 retries”
- 失败后上报错误类型和 URL 到监控系统(如 Sentry)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











