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。
再拆解你的代码执行流程:
- 调用
resolveAfter2Seconds(10),返回一个处于pending状态的Promise实例。 await暂停f1函数的执行,等待这个Promise的状态变化。- 2秒后
setTimeout触发,执行resolve(10),Promise实例状态变为fulfilled,同时把10存为兑现值。 await感知到Promise状态变化,取出兑现值10,赋值给x,随后执行console.log(x)输出10。
你提到的Promise.resolve()是独立的工具函数,作用是将任意值包装成Promise实例,和你代码里的resolve回调没有直接关系——后者是Promise构造器提供的、用来标记任务完成并传递结果的回调。
内容的提问来源于stack exchange,提问作者Antares
相关产品推荐
相关产品推荐

