应并行发起互不依赖的异步请求,用promise.all统一等待;需依赖前序结果时才串行await;循环中避免逐次await,应先生成promise数组再all;部分失败可接受时用promise.allsettled。

避免滥用 await 导致接口串行加载,核心是分清任务依赖关系:互不依赖的请求必须并行发起,不能一个接一个等。
识别哪些请求可以并行
只要后一个请求不需要前一个的结果,就属于“可并行”场景。比如首页同时拉取用户信息、订单列表、商品推荐,三者彼此无关。
- ✅ 可并行:fetchUser()、fetchOrders()、fetchProducts()
- ❌ 不可并行(必须串行):fetchUser() → 用 user.id 调 fetchPosts() → 用 post.id 调 fetchComments()
用 Promise.all 替代连续 await
把多个独立的异步调用放进数组,一次性 await Promise.all,所有请求会同时发出。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 错例(串行,总耗时 ≈ 300ms):
const a = await fetch('/a'); const b = await fetch('/b'); const c = await fetch('/c'); - 正例(并行,总耗时 ≈ 最慢那个,约 100ms):
const [a, b, c] = await Promise.all([fetch('/a'), fetch('/b'), fetch('/c')]); - 注意:Promise 数组在传入 Promise.all 时就已执行,不是等到 await 才发请求
处理部分失败的情况
Promise.all 遇到任一 reject 就整体失败。如果允许某些请求失败不影响其余,改用 Promise.allSettled。
const results = await Promise.allSettled([fetch('/a'), fetch('/b')]);- 每个 result 是 { status: 'fulfilled' | 'rejected', value | reason },可逐个判断处理
- 适合容错要求高、数据非强一致的场景(如埋点上报、非核心配置加载)
循环中别在每次迭代里 await
for 或 for...of 中直接 await,本质仍是串行——必须等上一轮结束才进下一轮。
- 错例:
for (const id of ids) { const item = await fetch(`/item/${id}`); } - 正例:先 map 出 Promise 数组,再统一 await:
const promises = ids.map(id => fetch(`/item/${id}`)); const results = await Promise.all(promises); - 若需逐个处理中间结果(如校验+保存),且顺序不重要,也可用 Promise.allSettled + 后续遍历
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










