Promise.all并发获取多页面数据,核心是将各请求包装为独立Promise并行发起,全部成功才返回按序结果数组;任一失败则整体拒绝,可用Promise.allSettled替代实现全量返回。

用 Promise.all 并发获取多个页面的数据,核心是把每个页面的请求包装成独立的 Promise,再统一传入 Promise.all。它会并行发起所有请求,等全部成功才返回结果数组;只要有一个失败,整个就拒绝(reject)。
确保每个请求都返回 Promise
最常见的是用 fetch,它本身返回 Promise,可直接使用:
const urls = [ '/api/page1', '/api/page2', '/api/page3' ]; const promises = urls.map(url => fetch(url).then(res => res.json()));
注意:这里用了 .then(res => res.json()),把响应体转成 JSON,这样 Promise.all 最终拿到的就是解析后的数据,不是 Response 对象。
用 Promise.all 执行并发请求
把 Promise 数组传进去,用 await 或 .then() 处理结果:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
立即学习“Java免费学习笔记(深入)”;
try {
const [data1, data2, data3] = await Promise.all(promises);
console.log('三个页面数据:', data1, data2, data3);
} catch (error) {
console.error('某个请求失败了', error);
}
结果数组顺序和输入 URL 顺序严格一致,data1 对应第一个 URL 的响应,不会错位。
处理部分失败的情况(可选进阶)
如果希望即使某个页面加载失败,其他数据仍能拿到,可以用 Promise.allSettled 替代:
- 它不会因为一个失败就中断,而是等所有 Promise 结束(fulfilled 或 rejected)
- 返回数组,每个元素是
{ status: 'fulfilled' | 'rejected', value | reason }
const results = await Promise.allSettled(promises); const successfulData = results .filter(r => r.status === 'fulfilled') .map(r => r.value);
避免常见坑
-
不要在 map 里写 async/await 函数:比如
urls.map(async url => {...})会返回 Promise 数组没错,但容易误写成await内部逻辑,反而变串行 - 错误处理要明确:Promise.all 失败时,catch 拿到的是第一个被 reject 的错误,不包含其他请求状态
- 注意浏览器并发限制:Chrome 等浏览器对同一域名的并发请求数有限制(通常 6 个左右),但一般几个页面请求不受影响

















