javascript 批量并发 ajax 的核心是控并发、保顺序、明错误:promise.all 适合全成功场景,promise.allsettled 适配成败皆需结果,并发池控制请求数,分页须前后端协同实现真分页。

JavaScript 处理批量并发 Ajax 请求,核心不是“压着发”,而是“控得稳、等得准、错得明”。重点在于控制并发数、保持结果顺序、合理应对失败,而不是盲目并行或强行串行。
用 Promise.all + fetch 控制并发并等待全部完成
这是最常用也最推荐的方式,适合请求彼此独立、需要全部成功才继续的场景:
- 把每个 URL 封装成一个 fetch Promise,并手动检查
response.ok,避免 HTTP 错误被忽略 - Promise.all 会按数组索引顺序返回结果,和响应快慢无关,天然保序
- 任一请求失败(包括网络异常或 status 非 2xx),整个 Promise 就 reject,适合强一致性要求
用 Promise.allSettled 处理“全都要,不管成败”
当需要知道每个请求最终状态(成功/失败都算完成),比如做日志汇总、降级展示或批量上报时:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 它不会因某个请求失败而中断,始终等所有 Promise 结束
- 返回数组,每个元素是
{ status: 'fulfilled' | 'rejected', value | reason } - 可轻松过滤出成功结果:
results.filter(r => r.status === 'fulfilled').map(r => r.value)
用并发池限制同时请求数量
面对几十上百个请求,不加限制容易触发浏览器连接上限或压垮后端。需实现“最多同时跑 N 个,空出一个就补一个”:
- 写一个并发控制器函数,接收任务数组和最大并发数(如 3 或 5)
- 内部用递归 + 索引追踪,每次只拉起未执行的任务,完成一个再启动下一个
- 确保结果数组仍按原始顺序排列,哪怕响应时间差异很大
分页请求要前后端配合,别在前端硬拆
大批量数据不能靠前端一次性拉完再切片,必须走真分页:
- 每次请求带上
pageNum和pageSize,从 1 开始计页 - 后端用数据库原生分页(如 MySQL 的 LIMIT OFFSET),千万别查全量再 subList
- 响应结构建议含
data和pageInfo(total、currentPage 等),前端据此渲染分页控件
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










