promise 是 javascript 处理异步操作的核心机制,具有 pending、fulfilled、rejected 三种不可逆状态,通过 new promise(executor) 创建,用 then() 和 catch() 链式处理结果,并提供 all、race、allsettled 等静态方法协调多个 promise,async/await 则是其语法糖。

Promise 是 JavaScript 中处理异步操作的核心机制,它用一种更清晰、可链式调用的方式替代了传统的回调函数嵌套(即“回调地狱”)。
Promise 的基本状态和创建
一个 Promise 实例有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。状态一旦改变,就不会再变。创建 Promise 时需传入一个执行器函数(executor),它接收两个参数:resolve(成功时调用)和 reject(失败时调用)。
例如:
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
const success = Math.random() > 0.5;
if (success) {
resolve("操作成功");
} else {
reject(new Error("操作失败"));
}
}, 1000);
});
用 then 和 catch 处理结果
Promise 实例通过 then() 方法注册成功回调,通过 catch() 注册失败回调。then 可接收两个参数:第一个是 fulfilled 时的处理函数,第二个是 rejected 时的处理函数(但推荐统一用 catch)。
- then() 返回一个新的 Promise,支持链式调用
- catch() 会捕获前面任意环节抛出的错误(包括 then 中的异常)
- 多个 then 串联时,上一个 then 的返回值会作为下一个 then 的输入
常用静态方法:Promise.all、Promise.race、Promise.allSettled
这些方法用于协调多个 Promise 的执行:
- Promise.all([...]):全部成功才 resolve,任一失败则立即 reject
- Promise.race([...]):哪个 Promise 最先完成(无论成功或失败),就以它的结果为准
- Promise.allSettled([...]):等待所有 Promise 结束,返回每个 Promise 的最终状态对象({status: "fulfilled" | "rejected", value | reason})
async/await 是 Promise 的语法糖
async 函数自动返回 Promise,await 只能在 async 函数内使用,它会暂停执行,直到右侧的 Promise 完成,然后解包其值(相当于 await p 等价于 p.then(v => v))。
例如:
async function fetchData() {
try {
const res = await fetch('/api/data');
const data = await res.json();
console.log(data);
} catch (err) {
console.error('请求失败:', err);
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











