Promise 是为解决异步流程控制设计的状态容器,代表“将来会有结果”的操作,具 pending/fulfilled/rejected 三种不可逆状态,需显式调用 resolve/reject,.then/.catch 实现链式处理,async/await 是其语法糖。

Promise 不是回调函数的语法糖,而是为解决异步流程控制而设计的状态容器。 它不能消除异步,但能让你把“等结果”这件事写得更清晰、更可组合。
Promise 是什么:一个有状态的异步值占位符
它代表一个「目前可能还没完成,但将来会有结果」的操作。这个操作只有三种确定状态:pending(进行中)、fulfilled(成功)、rejected(失败)。一旦进入后两者,状态就不可逆,且结果值只能被读取一次。
常见误解是把它当成“自动异步化工具”——new Promise(() => {}) 本身不会触发异步,真正异步的是你传进去的执行器函数里调用的 setTimeout、fetch、fs.readFile 这类操作。
如何创建和消费:用 new Promise 和 .then/.catch
手动创建 Promise 时,必须在执行器函数中显式调用 resolve() 或 reject(),否则它永远卡在 pending:
立即学习“Java免费学习笔记(深入)”;
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) {
resolve('ok'); // 触发 .then
} else {
reject(new Error('fail')); // 触发 .catch
}
});
消费时注意链式调用的返回值规则:
家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l
-
.then(onFulfilled)返回一个新的 Promise;如果onFulfilled返回普通值,新 Promise 状态为fulfilled,值就是该返回值 -
.then(onFulfilled, onRejected)的第二个参数只捕获当前 Promise 的 rejection,不拦截onFulfilled中抛出的错误 - 推荐统一用
.catch()收尾,它能捕获前面所有环节的 rejection(包括onFulfilled中 throw 的错误)
避免常见陷阱:嵌套、忘记 return、吞掉错误
下面这些写法极易出错:
- 在
.then里不return异步操作,导致后续.then拿到undefined而不是预期 Promise - 用
try/catch包裹new Promise外部代码——它捕获不到 Promise 内部的reject,因为那是异步抛出的 - 写了
.then(success, fail)却以为能捕获success函数里的异常,实际不能 - 多个并行请求用
.then串行写,而不是用Promise.all([p1, p2]),白白拉长总耗时
现代替代方案:async/await 让 Promise 更好读
async 函数本质就是语法糖,它自动把返回值包装成 Promise,内部用 await 等待 Promise 解析。但它没改变 Promise 的底层行为:
async function loadUser() {
try {
const res = await fetch('/api/user');
if (!res.ok) throw new Error('HTTP error');
return await res.json(); // 注意:await 后面必须是 Promise
} catch (err) {
console.error(err); // 这里能捕获 fetch 失败、JSON 解析失败、throw 的错误
}
}
关键点在于:await 只解包 Promise 的 fulfilled 值,rejected 会直接 throw,所以必须用 try/catch —— 这和 .catch() 的作用域是一致的,只是写法更线性。
真正容易被忽略的是:Promise 的错误传播是「静默丢弃」的,如果你创建了一个 Promise 但没接 .catch 或 try/catch,Chrome 和 Node.js 都会抛 UnhandledPromiseRejectionWarning,线上环境可能直接 crash。










