加载失败自动重试时怎么避免触发无限循环? IT人莉莉 提问于 2026-01-25 17:44:19 阅读 40 交互 我现在在做数据加载失败的自动重试功能,想实现失败三次后弹出提示。但写了个递归调用fetch的函数,发现请求次数会一直增加,控制台还报了Maximum call stack error。试过用setTimeout包裹递减重试次数,但有时候还是会卡死循环… 看了文档说要用防抖函数,但具体怎么结合重试次数控制呢?比如在axios拦截器里加逻辑,怎么避免重复触发和状态混乱? 我来解答 赞 11 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 技术志鸽 Lv1 这种情况我之前也遇到过,确实容易搞成无限递归或者堆栈溢出。别用单纯的递归了,直接用一个计数器配合异步队列控制重试次数。 给你个简单靠谱的实现方式,在Axios拦截器里可以用Promise的延时机制来避免无限循环: let retryCount = 0; axios.interceptors.response.use(null, async function (error) { const config = error.config; if (!config || retryCount >= 3) { return Promise.reject(error); } retryCount++; try { await new Promise(resolve => setTimeout(resolve, 1000)); // 防止过于频繁重试 return axios(config); // 重新发起请求 } catch (e) { if (retryCount === 3) { alert('请求失败,请检查网络'); } return Promise.reject(e); } }); // 别忘了每次请求开始时重置计数器 axios.interceptors.request.use(config => { retryCount = 0; return config; }); 关键点就是用一个全局变量retryCount来控制重试次数,每次请求开始前清零,失败时递增。通过setTimeout加个延迟,防止过于密集的重试导致浏览器卡死。 如果你用WordPress的REST API,记得在服务器端也设置合理的超时和错误处理逻辑,避免前端一直重试但后端根本没响应的情况。这种问题调试起来真够头疼的,我深有体会... 回复 点赞 19 2026-01-29 11:09 加载更多 相关推荐 1 回答 28 浏览 加载状态重试按钮样式错乱怎么解决? 在实现带加载状态的重试按钮时,点击触发加载动画后文字位置突然偏移,怎么调整才能保持布局稳定? 我用绝对定位包裹加载图标,但文字和图标会重叠,尝试过这样写CSS: .retry-btn { positi... Mr.恩泽 交互 2026-02-12 19:39:23 2 回答 18 浏览 加载失败时重试按钮没反应怎么办? 大家好,我在做一个图片加载组件时遇到了问题。当图片请求失败后,我按规范显示了错误提示和重试按钮,但点击重试按钮完全没反应,控制台也没有报错。 我用axios发起请求时这样写的: this.axios.... 迷人的羽墨 交互 2026-02-12 11:46:35 2 回答 55 浏览 Vue加载失败后重试按钮点击不更新状态怎么办? 我在用Vue做图片加载功能时,遇到加载失败后重试按钮能显示但点击没反应的问题。代码逻辑是失败时显示重试按钮,点击后重置状态重新加载,但实际点击按钮后loading状态始终没变化: <templa... 南宫瑞珺 交互 2026-02-03 23:22:34 1 回答 15 浏览 加载失败后怎么重新请求数据? 我在用 Vue 做一个列表页,第一次加载失败了,用户点“重试”按钮时没反应,不知道是不是状态没更新对。 我试过在 retry 方法里重新调用 fetchList,但 loading 状态好像卡住了,界... Tr° 福萍 交互 2026-03-04 01:21:24 2 回答 52 浏览 Jira自定义工作流状态后自动化规则触发失败怎么办? 刚给项目工作流新增了“待测试”状态,配置自动化规则“当状态变为待测试时发送通知”,但实际操作后规则没触发。检查过条件设置没问题,重启规则也没用,有啥遗漏的配置步骤吗? 前端页面用Vue显示任务状态时也... 溪纯 ☘︎ 工具 2026-01-29 16:25:32 1 回答 2 浏览 分页加载时怎么避免重复请求和数据错乱? 我用 Vue 做了个列表,滚动到底部就加载下一页,但有时候快速滚动会触发多次请求,导致数据重复或者顺序错乱。试过加 loading 锁,但好像没完全解决问题。 这是我的加载逻辑: <templa... 晓萌 Dev 优化 2026-03-05 19:06:22 1 回答 13 浏览 无限滚动加载时列表抖动怎么办? 我用 IntersectionObserver 做了个无限滚动,但每次加载新数据后页面会突然跳一下,体验很糟糕。明明没动滚动位置,怎么就抖了? 试过给容器加固定高度、用虚拟滚动库,但要么没效果要么太重... ___怡冉 优化 2026-02-28 13:48:19 1 回答 16 浏览 Jira自动化规则里怎么根据CSS类名触发操作? 我在Jira的Automation里想根据页面上某个元素的CSS类名来触发动作,但不知道怎么写条件。比如当页面有这个样式时就发通知: .status-badge.warning { backgroun... 继芳🍀 工具 2026-02-27 18:29:17 1 回答 21 浏览 Lottie动画加载后不自动播放怎么办? 我用Lottie加载了一个JSON动画,但页面加载完后它根本不自动播放,得手动点一下才动。明明之前项目里是自动播的,是不是哪里配置漏了? 我试过加 autoplay: true,也检查了JSON文件没... FSD-文明 交互 2026-02-26 06:17:19 1 回答 19 浏览 React Query 预加载数据后怎么避免组件重复请求? 我在用 React Query 做页面切换前的数据预加载,但发现进入页面后还是会触发一次新的请求,明明之前已经 preload 过了。 我试过在路由跳转前调用 queryClient.prefetch... 夏侯威威 优化 2026-02-23 22:22:20
给你个简单靠谱的实现方式,在Axios拦截器里可以用Promise的延时机制来避免无限循环:
关键点就是用一个全局变量
retryCount来控制重试次数,每次请求开始前清零,失败时递增。通过setTimeout加个延迟,防止过于密集的重试导致浏览器卡死。如果你用WordPress的REST API,记得在服务器端也设置合理的超时和错误处理逻辑,避免前端一直重试但后端根本没响应的情况。这种问题调试起来真够头疼的,我深有体会...