Promise是JavaScript处理异步操作的标准对象,代表未来可能完成或失败的操作,具有pending、fulfilled、rejected三种不可逆状态,支持链式调用、错误捕获及all/race/allSettled等组合方法。

Promise 是 JavaScript 中处理异步操作的标准化对象,它代表一个**尚未完成但未来可能完成或失败的操作**,并提供统一的方式链式响应结果或错误。
Promise 的三种状态
每个 Promise 实例始终处于以下一种状态:
- pending(等待中):初始状态,既未成功也未失败
-
fulfilled(已成功):操作完成,调用
.then()获取返回值 -
rejected(已失败):操作出错,调用
.catch()或.then(null, handler)捕获错误
状态一旦改变(pending → fulfilled 或 pending → rejected),就不可逆,也不会再变。
创建和使用 Promise
用 new Promise() 构造器创建,接收一个执行器函数(executor),该函数立即执行,并传入两个参数:resolve 和 reject:
立即学习“Java免费学习笔记(深入)”;
const fetchData = new Promise((resolve, reject) => {
setTimeout(() => {
const success = Math.random() > 0.3;
if (success) {
resolve("数据加载成功");
} else {
reject(new Error("网络请求失败"));
}
}, 1000);
});
后续通过 .then() 处理成功结果,.catch() 处理错误:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
fetchData .then(data => console.log(data)) .catch(err => console.error(err.message));
链式调用与 Promise 组合
Promise 的核心优势在于可链式调用,每个 .then() 或 .catch() 都返回一个新的 Promise,支持顺序异步流程:
- 在
.then()中返回普通值 → 下一个.then()接收该值 - 在
.then()中返回新 Promise → 下一个.then()等待其完成后再执行 -
.catch()会捕获前面所有环节抛出的错误(包括同步异常和 Promise rejection)
常见组合方法:
-
Promise.all([p1, p2, p3]):全部成功才 resolve,任一失败则 reject -
Promise.race([p1, p2, p3]):哪个最先 settle(fulfill/reject),就以它的结果为准 -
Promise.allSettled([p1, p2]):等待全部结束,返回每个 Promise 的最终状态对象
对比回调函数与 async/await
相比传统回调(易导致“回调地狱”),Promise 显著提升可读性和错误处理能力;而 async/await 是 Promise 的语法糖,让异步代码写起来像同步:
async function loadUser() {
try {
const res = await fetch('/api/user');
const user = await res.json();
return user;
} catch (err) {
console.error('加载用户失败:', err);
}
}
注意:await 只能在 async 函数内使用,且后面必须是 Promise(或可转为 Promise 的值)。









