promise 的值必须在其 fulfilled 状态后通过 .then() 回调获取,.then() 返回新 promise 而非原始值;错误需用 .catch() 显式捕获;async/await 是语法糖,需在 async 函数中使用,顶层 await 需环境支持。

不能直接拿到结果,得等 Promise 完成后通过回调取值。
用 .then() 接收成功值
Promise 的值必须在它变成 fulfilled 状态后,通过 .then() 的第一个回调函数获取。这个回调的参数就是 resolve() 传进来的值。
- 写法示例:
promise.then(value => { /* 这里 value 就是结果 */ }) - 注意:
.then()本身返回新 Promise,不是原始数据;直接赋值const data = promise拿到的是 Promise 对象,不是你要的值 - 如果需要链式处理多个异步步骤,每个
.then()的返回值会作为下一个.then()的输入
用 .catch() 捕获失败原因
当 Promise 被 reject() 或内部抛错时,错误不会自动中断流程,而是要靠 .catch() 显式捕获。
- 推荐把
.catch()放在链末尾,统一处理前面任意环节的错误 -
.catch()等价于.then(null, error => {...}),但更清晰、更易维护 - 如果漏写
.catch(),错误会静默丢失(现代浏览器会报 “unhandled rejection” 警告)
想同步写法?用 async/await
这是 .then() 的语法糖,让异步代码看起来像同步,但本质仍是 Promise。
- 必须在
async函数内使用await,比如:const data = await myPromise() - 错误用
try/catch捕获,和同步代码一致 - 注意:顶层作用域不能直接
await(会报 SyntaxError),需包在 async 函数或模块顶层(ESM 支持 top-level await,但需环境支持)
别踩这些常见坑
很多问题其实源于对 Promise 异步本质的理解偏差。
- 不要试图“同步取出” Promise 的值——它天生是异步的,没有阻塞等待机制
- 避免混用
.then(success, fail)和.catch(),容易造成错误被忽略或重复处理 - 多个 Promise 并行执行用
Promise.all([...]),别一个个await串行写,性能差 - 构造 Promise 时,确保所有分支都调用
resolve或reject,否则状态永远 pending











