并发请求关键在于提前发起、统一等待,常用promise.all;依赖关系需串行,无依赖可并发;大批量请求要分批限流并防抖。

多个 await 默认就是串行执行的,想变成并发,关键不是“改写 await”,而是**不让它们互相等待**——把请求提前发出去,再统一等结果。
用 Promise.all 并发发起所有请求
这是最直接、最常用的方式。先调用异步函数拿到 Promise 实例(此时请求已发出),再用 Promise.all 批量等待:
- ✅ 正确写法:const [a, b, c] = await Promise.all([fetchA(), fetchB(), fetchC()]);
- ⚠️ 注意:Promise.all 遇到任意一个失败就会整体 reject;如需“尽力而为”,换用 Promise.allSettled(),它总会完成,返回每个任务的状态对象
- ? 小技巧:如果某请求耗时长但非核心(比如埋点上报),可单独发起、不 await,避免拖慢主流程
提前发起 + 按需 await(解耦发起与等待)
适合需要在等待前做些事(比如显示 loading、记录日志)的场景:
- 先声明并调用:const userP = fetchUser(); const orderP = fetchOrders();
- 再做 UI 或逻辑处理:showLoading(); logStart();
- 最后统一等:const [user, orders] = await Promise.all([userP, orderP]);
按依赖关系混合使用
不是所有请求都能并发。有先后依赖的,仍要串行 await;无依赖的,就塞进 Promise.all:
- 比如:登录 → 拿 token → 查权限 → 拉用户数据 + 订单列表 + 配置项
- 前两步必须串行:const token = await login(); const perms = await fetchPerms(token);
- 后三步互不依赖,可并发:const [user, orders, config] = await Promise.all([fetchUser(token), fetchOrders(token), fetchConfig()]);
大批量请求要分批限流
100 个 ID 同时 fetch?浏览器扛不住,后端也可能拒绝。得控制并发数:
- 用 p-limit 这类工具限制同时最多 5–6 个请求
- 每批内部用 Promise.all,并行执行;批与批之间自然串行
- 高频操作(如搜索框输入)务必加防抖,避免瞬间堆积大量请求
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











