promise 本身无降级机制,但可通过 allsettled、catch、then 与条件判断实现优雅回退,如备用接口、缓存或默认值;关键在保障流程不中断并按优先级选可用结果。

Promise 本身不直接提供“降级处理”机制,但可以通过组合 Promise.allSettled、catch、then 和条件判断,实现多个接口请求失败时的优雅回退(比如用备用接口、缓存数据或默认值)。关键在于把“失败不影响整体流程”和“按优先级选择可用结果”这两点设计清楚。
用 Promise.allSettled 收集所有请求状态
它会等待所有 Promise 结束(无论 fulfilled 还是 rejected),返回每个结果的对象数组,适合需要评估多个接口成败后再决策的场景。
- 每个元素含
status("fulfilled" 或 "rejected")、value或reason - 避免因单个接口失败导致整个链路中断
- 适合并行请求多个同类型服务(如主站 API、备用 CDN 接口、本地缓存)
按优先级选取第一个成功结果
如果目标是“只要有一个成功就用它”,可用 Promise.race 配合错误忽略逻辑;但更稳妥的是用 allSettled 后手动筛选:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 对返回数组用
find找第一个status === 'fulfilled'的项 - 若没找到,再 fallback 到默认值或抛出聚合错误
- 示例:主接口超时 → 用兜底接口 → 兜底也失败 → 返回空列表
给每个请求单独加超时和重试(增强鲁棒性)
降级不只是“换一个接口”,也包括对单个请求的容错。可封装带 timeout 和 retry 的 fetch:
- 用
AbortController控制单个请求超时 - 对关键接口做 1~2 次重试(注意幂等性)
- 把每个接口包装成返回
Promise的函数,便于后续识别来源
结合缓存做快速降级
前端常把上一次成功响应存在 localStorage 或内存中,网络请求失败时立即返回缓存数据:
- 发起请求前先读缓存,设置
staleTime(如 30 秒)判断是否可用 - 请求成功后更新缓存;失败且缓存有效,则 resolve 缓存值
- 注意敏感数据不宜缓存,需加版本或时间戳校验
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










