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

为何我的Promise状态会从fulfilled变为pending?

问题原因解析

你看到的并不是同一个Promise的状态从fulfilled变为pending,而是两个完全不同的Promise对象:

  • 第一个是createPromise()返回的Promise(我们叫它P1):在showData函数内部执行时,因为data变量存在,executor会同步调用resolve,所以P1会立即进入fulfilled状态,这就是你第一次console.log(data)看到fulfilled的原因。

  • 第二个是showData这个async函数返回的全新Promise(我们叫它P2):所有async函数的特性就是——不管你return的是什么值(普通值或另一个Promise),它都会自动创建一个新的Promise对象返回。

关键执行顺序导致状态差异:

  1. 调用showData()时,同步执行内部代码:创建P1并立即让它fulfilled,打印P1,然后return P1。此时P2刚被创建,状态还是pending。
  2. 同步执行console.log(promise)(这里的promise就是P2),此时同步代码还没执行完,微任务队列还没处理,P2的状态还没更新,所以打印pending。
  3. 同步代码执行到console.log('print_something')后,进入微任务阶段:async函数会把P1的结果同步到P2,P2才会变为fulfilled状态。

简单说:async函数返回的新Promise,需要等当前同步代码跑完、微任务触发后,才会和你return的Promise状态同步,所以在同步打印时它还是pending。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:22:10