Promise是JavaScript中处理异步操作的对象,解决回调地狱问题;有pending、fulfilled、rejected三种不可逆状态;通过new Promise()创建,用then()处理成功、catch()捕获错误,支持链式调用。

Promise 是 JavaScript 中用于处理异步操作的对象,它代表一个尚未完成、但未来可能会完成(或失败)的操作的结果。 它解决了传统回调函数嵌套过深(“回调地狱”)的问题,让异步代码更清晰、更易维护。
Promise 的三种状态
每个 Promise 实例始终处于以下其中一种状态:
- pending(进行中):初始状态,既未成功也未失败
-
fulfilled(已成功):操作成功完成,此时可调用
then()获取结果 -
rejected(已失败):操作出错,此时可调用
catch()捕获错误
状态一旦改变(pending → fulfilled 或 pending → rejected),就不可逆,也不会再变。
如何创建和使用 Promise
用 new Promise() 构造函数创建,它接收一个执行器函数(executor),该函数立即执行,并传入两个参数:resolve(成功时调用)和 reject(失败时调用):
立即学习“Java免费学习笔记(深入)”;
const myPromise = new Promise((resolve, reject) => {
// 模拟异步操作,比如网络请求或定时任务
setTimeout(() => {
const success = Math.random() > 0.3;
if (success) {
resolve("操作成功!"); // 触发 fulfilled 状态
} else {
reject(new Error("操作失败")); // 触发 rejected 状态
}
}, 1000);
});
用 then() 处理成功结果
then() 接收两个可选参数:第一个是成功时的回调(接收 resolve 的值),第二个是失败时的回调(等价于 catch,但不推荐混用):
- 推荐写法:只传一个成功回调,错误统一交给
catch() -
then()返回一个新的 Promise,支持链式调用(可继续then()或catch()) - 如果在
then()回调中返回值(非 Promise),会自动包装成 resolved Promise;若返回 Promise,则等待其结果
myPromise
.then(result => {
console.log(result); // "操作成功!"
return result + " —— 并继续处理";
})
.then(newResult => {
console.log(newResult); // "操作成功! —— 并继续处理"
});
用 catch() 捕获和处理错误
catch() 专门用于捕获 Promise 链中任意环节抛出的错误(包括 reject() 和同步异常):
- 它等价于
then(null, rejectionHandler) - 放在链末尾可集中处理前面所有可能的错误
- 如果
catch()中没有重新抛出错误,后续then()仍会执行(因为catch自身返回的是 resolved Promise)
myPromise
.then(result => {
console.log(result);
throw new Error("手动抛错"); // 这里出错会被 catch 捕获
})
.catch(err => {
console.error("错误:", err.message); // "错误: 手动抛错"
});











