Promise是JavaScript异步处理核心,有pending、fulfilled、rejected三种状态,通过new Promise创建并使用then、catch、finally链式调用,支持all、allSettled、race、any等组合方法,需注意错误传播与捕获,是async/await的基础。

JavaScript 中的 Promise 是处理异步操作的核心机制,它让开发者能以更清晰、可读性更强的方式管理异步流程。Promise 表示一个异步操作的最终完成或失败,以及其返回的结果值。通过链式调用和组合,可以有效控制多个异步任务的执行顺序和依赖关系。
Promise 基本结构与状态
一个 Promise 有三种状态:
- pending(等待中):初始状态,既没有被兑现,也没有被拒绝。
- fulfilled(已成功):操作成功完成,Promise 被“resolve”。
- rejected(已失败):操作失败,Promise 被“reject”。
状态一旦从 pending 变为 fulfilled 或 rejected,就不会再改变。创建 Promise 使用 new Promise(executor) 构造函数,其中 executor 是一个立即执行的函数,接收 resolve 和 reject 两个回调函数作为参数。
const myPromise = new Promise((resolve, reject) => { // 异步操作 setTimeout(() => { const success = true; if (success) { resolve("操作成功"); } else { reject("操作失败"); } }, 1000); });链式调用与 then/catch/finally
Promise 支持链式调用,每个 then 方法返回一个新的 Promise,使得可以按顺序执行多个异步操作。
立即学习“Java免费学习笔记(深入)”;
- then(onFulfilled, onRejected):接收成功和失败的回调,通常只传成功回调。
- catch(onRejected):捕获前面任意环节的错误,推荐在链尾使用。
- finally(callback):无论成功或失败都会执行,适合做清理工作。
Promise 组合方法
当需要同时处理多个异步任务时,Promise 提供了几个静态方法来控制流程:
- Promise.all(iterable):所有 Promise 都成功才成功,任何一个失败则整体失败。
- Promise.allSettled(iterable):等待所有 Promise 结束(无论成功或失败),返回结果数组。
- Promise.race(iterable):返回第一个完成(无论是 resolve 还是 reject)的 Promise 结果。
- Promise.any(iterable):返回第一个 fulfilled 的 Promise,全部失败才触发 catch。
错误处理与最佳实践
合理处理错误是异步流程控制的关键。避免“未捕获的 Promise 错误”,应始终使用 catch 终结链式调用。
- 在 then 中抛出异常也会被后续 catch 捕获。
- 不要忘记错误处理,尤其是在复杂链式逻辑中。
- 使用 async/await 语法时,仍需配合 try/catch 处理异常。
基本上就这些。掌握 Promise 的状态流转、链式调用和组合方法,就能有效控制 JavaScript 中的异步流程。不复杂但容易忽略细节,尤其是错误传播机制。熟练之后,可以平滑过渡到 async/await 写法,本质仍是基于 Promise。










