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

JavaScript中await如何获取Promise的resolve结果?

关于await获取Promise返回值的原理

首先要区分清楚两个概念:手动创建Promise时的resolve回调函数,和工具函数Promise.resolve(),这是完全不同的东西:

  • Promise实例的内部状态管理
    你写的resolveAfter2Seconds函数返回的是一个新的Promise实例。当你在Promise的执行器里调用resolve(x)时,这个回调的作用不是“返回值”,而是告诉这个Promise实例:任务已经完成,最终结果是x。此时Promise会把x存储为自己的「兑现值」,同时将状态从「pending(等待)」变为「fulfilled(已兑现)」。

  • await的工作逻辑
    await关键字专门用来处理Promise:它会暂停当前async函数的执行,直到后面跟着的Promise实例状态变为已兑现。一旦Promise兑现,await会直接取出Promise内部存储的兑现值,把这个值作为整个await表达式的结果,赋值给变量x。

再拆解你的代码执行流程:

  1. 调用resolveAfter2Seconds(10),返回一个处于pending状态的Promise实例。
  2. await暂停f1函数的执行,等待这个Promise的状态变化。
  3. 2秒后setTimeout触发,执行resolve(10),Promise实例状态变为fulfilled,同时把10存为兑现值。
  4. await感知到Promise状态变化,取出兑现值10,赋值给x,随后执行console.log(x)输出10。

你提到的Promise.resolve()是独立的工具函数,作用是将任意值包装成Promise实例,和你代码里的resolve回调没有直接关系——后者是Promise构造器提供的、用来标记任务完成并传递结果的回调。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:13:23