移动端健壮性根节点下分四主干:一、重试前提——只对可恢复错误响应,设「错误守门员」分类逻辑;二、重试节奏——指数退避+抖动(baseDelay、attempt)、≤3次、总耗时≤4s;三、生命周期——AbortController介入全流程,及时abort;四、UI反馈——静默→Toast→明确入口/降级,非关键请求直接丢弃。

画 JS 请求重试机制的思维导图,关键不是罗列 API,而是围绕“移动端真实故障场景”组织逻辑。核心应聚焦策略性判断、可控执行、用户可感这三层,避免堆砌代码片段。
一、重试前提:只对可恢复错误响应
这是整个机制的起点,画在中心主干最上方,加粗强调。
-
必须重试:网络中断(
ERR_NETWORK)、连接超时(ECONNABORTED)、5xx 响应(尤其含Retry-After头) -
禁止重试:400/401/403/404 等客户端错误;非幂等 POST/PUT(除非服务端明确支持幂等且带
Idempotency-Key) - 建议用统一错误分类函数封装判断逻辑,导图中可标为「错误守门员」模块
二、重试节奏:指数退避 + 抖动
这是防雪崩的关键设计,放在主干中间偏左位置,用颜色或图标突出「节奏感」。
Node.js 可靠编程技能。避免事件循环阻塞、异步陷阱、ESM 兼容问题和内存泄漏。触发词:Node.js 开发、async/await、流处理、性能优化、安全编码。
- 基础延迟按
base × 2^attempt增长(例:500ms → 1s → 2s) - 每次叠加
Math.random() * 200毫秒抖动,避免重试风暴 - 最大尝试次数设为 2~3 次(移动端用户容忍窗口窄,总耗时建议 ≤ 4s)
三、请求生命周期管理:AbortController 必须介入
放在主干中间偏右,强调「清理」而非「发起」。
- 每次请求前新建
AbortController,传入signal - 请求完成(无论成功/失败/重试结束)立即调用
controller.abort() - 页面卸载或组件销毁时,统一中止所有 pending 请求
四、UI 层反馈与降级路径
作为末端分支,体现「人本设计」,不可省略。
- 首次失败:静默重试,不打扰用户
- 二次失败:轻量提示(如 Toast:“网络不稳定,正在重试…”)
- 最终失败:给出明确操作入口(“重试”按钮)或降级内容(缓存数据、占位文案)
- 非关键请求(埋点、头像预加载)失败直接丢弃,不阻塞主线程
整张图以「移动端健壮性」为根节点,四个主干呈放射状展开,每个分支下用关键词+简短说明呈现,避免长句。不需要画具体代码,但可标注关键变量名(如 baseDelay、signal)帮助联想。不复杂但容易忽略。

















