Promise的核心作用是将层层回调的异步流程重构为线性可读的链式结构,通过.then链式调用、.catch统一错误处理、Promise.all并发控制及Promise.race响应优先策略,提升代码可读性与错误可控性。

Promise 的核心作用,就是把“层层回调”的异步流程,变成线性可读的链式结构。它不改变异步本质,但彻底重构了代码组织方式,让逻辑更清晰、错误更可控。
用 .then 链代替回调嵌套
传统回调写法容易形成“金字塔”结构,而 Promise 通过返回新 Promise 实现自动串联:
- 每个 .then() 返回的值(非 Promise)会被自动包装成 resolved 状态的新 Promise;
- 如果返回的是另一个 Promise,后续 .then() 会等待它完成后再执行;
- 这样就能把原本嵌在 callback 里的下一次异步调用,直接写在 .then 里,避免缩进加深。
统一错误处理,避免漏捕异常
深层嵌套中,某一层出错可能被上层忽略;Promise 提供集中式错误兜底:
- .catch() 能捕获链中任意环节抛出的错误或 rejected 状态;
- 错误会沿链向下传递,直到遇到第一个 .catch,不再需要每层都写 try/catch 或 error 回调;
- 即使中间某个 .then 抛错,后续 .then 会被跳过,直接进 .catch。
并发多个异步任务,用 Promise.all
当多个请求互不依赖、可同时发起时,Promise.all 让它们并行执行并统一收口:
- 传入一个 Promise 数组,返回一个新的 Promise;
- 只有全部成功才进入 .then,结果按原数组顺序排列;
- 任一失败就立即触发 .catch,返回最先 rejected 的原因;
- 典型场景:页面初始化需加载用户信息 + 权限配置 + 公告列表,全部就绪再渲染。
响应最快的那个,选 Promise.race
适用于“谁先回来谁先用”的场景,比如设置超时保护或降级策略:
- Promise.race([p1, p2]) 返回最先 settled(无论 fulfilled 还是 rejected)的那个 Promise 的结果;
- 常与定时器 Promise 配合实现超时控制:把业务请求和 timeout Promise 一起 race;
- 若请求超时,race 返回 timeout 的 reject,可触发备用方案或提示用户。

















