Promise.all 和 Promise.allSettled 详解

这两个都是 Promise 并发处理 的核心 API,用来同时执行多个 Promise ,最大的区别是:对失败的处理方式完全不同

Promise.all必须全部成功 ,一个失败就直接整体失败(短路失败

Promise.allSettled无论成功失败都等到底 ,返回所有结果(全部完成


1. Promise.all()

特点:

  • 接收一个 Promise 数组
  • 所有 Promise 都成功 → 返回成功结果数组
  • 只要有一个失败 → 立即触发失败,不会等待其他 Promise
  • 适合:必须全部成功才能继续的场景(比如批量请求数据缺一不可)
javascript 复制代码
const p1 = Promise.resolve('成功1');
const p2 = Promise.resolve('成功2');
const p3 = Promise.reject('失败3');

// 全部成功
Promise.all([p1, p2])
  .then(res => console.log('all 成功:', res)) 
  .catch(err => console.log('all 失败:', err));

// 有一个失败 → 直接整体失败
Promise.all([p1, p2, p3])
  .then(res => console.log('all 成功:', res))
  .catch(err => console.log('all 失败:', err)); 

2. Promise.allSettled()

特点:

  • 接收一个 Promise 数组
  • 等待所有 Promise 执行完成(不管成功 / 失败)
  • 永远不会走到 catch ,返回一个结果对象数组
  • 每个结果对象包含:
    • status: "fulfilled" + value:成功
    • status: "rejected" + reason:失败
  • 适合:需要知道每一个请求的结果(比如批量上传、批量校验)
javascript 复制代码
const p1 = Promise.resolve('成功1');
const p2 = Promise.reject('失败2');

Promise.allSettled([p1, p2])
  .then(results => {
    console.log('allSettled 结果:', results);
  });


//    [
//      { status: 'fulfilled', value: '成功1' },
//      { status: 'rejected', reason: '失败2' }
//    ]

3. 核心区别对比表

特性 Promise.all Promise.allSettled
失败处理 一个失败 → 整体失败 全部执行完,返回所有结果
返回值 成功数据数组 / 失败原因 固定返回结果对象数组
状态 要么全成功,要么直接失败 永远是成功状态
适用场景 缺一不可、强依赖 收集所有结果、不关心部分失败

4. 实际使用场景

用 Promise.all

  • 表单提交前多个接口必须全部成功
  • 页面初始化必须加载完所有资源
  • 批量创建数据必须全部创建成功

用 Promise.allSettled

  • 批量上传文件(部分失败不影响其他)
  • 批量获取用户信息(个别用户不存在也要展示其他)
  • 需要统计成功 / 失败数量的任务

总结

  1. 缺一不可 → 用 Promise.all
  2. 全部要结果 → 用 Promise.allSettled
  3. all短路失败allSettled等待到底
相关推荐
不简说18 分钟前
JS 代码技巧 vol.1 — 10 个让代码少写 30% 的小套路
前端·javascript·面试
@@@@@@@@5421 分钟前
JavaScript 的缺点与 TypeScript 的弥补
开发语言·javascript·typescript
Hilaku22 分钟前
为什么业务型前端容易遭遇中年危机?
前端·javascript·程序员
এ慕ོ冬℘゜31 分钟前
深度解析 JavaScript:赋予 Web 灵魂的“全栈语言”
开发语言·前端·javascript
iCOD3R33 分钟前
Skill - 3秒生成精美GitHub主页
前端·程序员·ai编程
爱勇宝39 分钟前
《道德经》第5章:生产环境不相信眼泪
前端·后端·架构
掘金者阿豪44 分钟前
LEFT JOIN 凭空消失的背后,是优化器偷偷帮你做了决定
前端·后端
HackTwoHub1 小时前
AntiDebug Mcp、AI逆向绕过前端,Hook 加密接口,抓取 Vue 路由漏洞,接入 MCP 让 AI 自动化挖掘前端漏洞
前端·vue.js·人工智能·安全·web安全·网络安全·系统安全
Mr_凌宇1 小时前
AI 应用工程进阶扩展学习笔记 二
前端·面试
Hyyy1 小时前
Git Worktree 完全讲解
前端·后端·面试