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

new Promise返回的Promise是否随执行器同步完成决议或拒绝?

Promise执行器与决议时机的疑问解答

首先明确两个核心结论:

  • new Promise()的执行器函数确实是同步执行的,在Promise构造过程中就会立即调用它,传入resolve和reject方法。
  • 当执行器内直接调用resolve或reject时,Promise的状态会同步完成决议/拒绝——也就是Promise的最终状态在执行器执行结束时就已经确定了。

以你给出的代码为例:

const myPromise = new Promise((resolve, reject) => {
  if (/* some condition */) {
    resolve('Promise fulfilled');
  } else {
    reject('Promise rejected');
  }
});

执行器执行完毕后,myPromise的状态已经是fulfilled或rejected,你可以通过立即打印这个Promise对象直接看到它的状态。

需要区分的是:Promise状态变更后触发的.then/.catch回调函数,会被放入微任务队列,必须等当前代码执行完成、调用栈清空后才会执行。这也是你会产生“要等当前代码执行完才能看到状态影响”错觉的原因——其实状态本身已经同步确定了,只是回调的执行是异步的。

举个直观的验证例子:

const testPromise = new Promise((resolve) => {
  console.log('执行器同步运行');
  resolve('决议完成');
});

// 同步打印Promise,能直接看到状态已确定
console.log(testPromise); 

testPromise.then(res => {
  console.log(res); // 微任务阶段执行,在当前栈代码之后
});

console.log('当前栈代码执行完毕');

这段代码的输出顺序是:

  1. 执行器同步运行
  2. Promise {: "决议完成"}
  3. 当前栈代码执行完毕
  4. 决议完成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:01:05