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('当前栈代码执行完毕');
这段代码的输出顺序是:
- 执行器同步运行
- Promise {
: "决议完成"} - 当前栈代码执行完毕
- 决议完成
内容的提问来源于stack exchange,提问作者jwa
相关产品推荐
相关产品推荐

