promise聚合多个接口的核心是并发请求、统一处理与容错降级,采用allsettled实现全响应收集,配合超时控制、错误分类及缓存兜底,确保弱网下不白屏、不卡死。

Promise 实现多个不同源接口的聚合兜底,核心在于并发请求 + 统一结果处理 + 容错降级。不是等所有都成功才返回,而是不管部分失败,仍能拿到已有数据,并明确标记哪些失败、哪些成功。
用 Promise.allSettled 做基础聚合
这是最直接的方式:它不会因某个请求失败而中断,而是等待所有 Promise 结束(fulfilled 或 rejected),返回每个结果的状态和值。
- 适合“全都要,但允许个别失败”的场景,比如同时拉取用户信息、订单列表、通知数三个接口
- 返回数组,每个元素含
status("fulfilled" / "rejected")、value或reason - 注意:不支持超时控制,需配合
AbortController或封装 timeout
手动封装带超时和降级的聚合函数
真实业务中常需超时熔断 + 失败时返回默认值(兜底)。可写一个通用函数:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 每个请求包装成带 timeout 的 Promise,超时则 reject
- 用
Promise.allSettled汇总结果 - 对 rejected 项,检查错误类型:网络异常?404?500?按策略返回默认数据(如空数组、null、缓存值)
- 示例:订单接口失败 → 返回
{ list: [], total: 0 };用户信息失败 → 返回{ name: '游客', avatar: '' }
结合缓存做二级兜底
首次失败后,可尝试读本地缓存(localStorage / IndexedDB)或内存缓存(Map),提升用户体验:
- 请求前先查缓存,有且未过期就直接用
- 请求成功后更新缓存
- 请求失败且无缓存 → 返回预设兜底值;有缓存 → 返回缓存 + 标记
stale: true - 避免“白屏”或“加载中卡死”,尤其弱网环境下
错误分类与差异化兜底策略
不是所有失败都该返回同一默认值。区分错误类型,让兜底更合理:
- 网络错误(TypeError / AbortError) → 返回空数据 + 提示“网络不稳,请稍后重试”
- 服务端 401/403 → 清登录态,跳转登录页
- 404 或业务 code=1001(数据不存在) → 显示“暂无内容”,不报错
- 5xx 或超时 → 返回上一次有效数据(需配合缓存)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










