You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何await获取的是Promise的resolved值3而非已兑现状态的Promise?

为什么await后变量拿到的是Promise兑现值而非Promise对象?

先看这段代码:

function somePromise () {
    return new Promise (resolve => {
        setTimeout(() => {
            resolve (3)
        }, 3000)
    })
}
async function solve() {
    console.log(1) 
    let data = await somePromise(); 
    console.log(2) 
    console.log(data)
}
solve();

这段代码的输出为:

1
2
3

疑问:变量data的值为何是3,而非处于已兑现(fulfilled)状态的Promise对象?我原本预期data存储的是Promise对象,而非数字3。


解答

这就是await关键字的核心作用——它会暂停当前async函数的执行,等待右侧的Promise对象完成状态变更:

  • 如果Promise兑现(fulfilled),await会直接提取出Promise内部的兑现值,把这个值赋值给变量,而不是返回Promise对象本身。
  • 如果Promise拒绝(rejected),则需要用try/catch捕获对应的错误。

简单来说,let data = await somePromise() 等价于用then提取值的写法:

somePromise().then(value => {
  let data = value;
  // 后续console.log(2)等代码
});

await就是把Promise的异步操作做了“同步化”包装,让你不用写嵌套的回调,直接拿到最终结果。

内容的提问来源于stack exchange,提问作者Shivansh Raghav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:22:01