Promise.resolve() 不触发微任务,仅创建已 fulfilled 的 Promise;真正触发微任务的是 .then() 调用时将回调入队。微任务在当前宏任务结束后立即执行,优先级高于 setTimeout 等宏任务。

Promise.resolve() 本身不直接触发微任务入队,它只是立即返回一个已 fulfilled 的 Promise 实例;真正的微任务入队发生在调用 .then() 并传入回调函数时。
Promise.resolve() 只是创建一个“已完成”的 Promise
它等价于:new Promise(r => r(value)),但内部优化为跳过 executor 执行,直接进入 fulfilled 状态。此时 Promise 对象已确定状态和值,但没有注册任何回调,也不产生微任务。
例如:
Promise.resolve(42); // 此刻什么都没发生,没入队微任务.then() 是微任务入队的关键动作
当在 Promise 实例上调用 .then(onFulfilled) 时,引擎会检查该 Promise 当前状态:
- 如果已是 fulfilled(比如由
Promise.resolve()创建),就把onFulfilled函数包装成微任务,加入微任务队列 - 如果还在 pending,则暂存回调,等状态变更后再入队
所以真正触发微任务的是 .then() 的调用时机,不是 Promise.resolve() 的创建时机。
例如:
Promise.resolve(42).then(x => console.log(x));// 这一行执行时:Promise 已 fulfilled → 立即将 console.log 包装为微任务入队
微任务入队的时机与执行顺序
微任务是在当前宏任务(如 script、setTimeout 回调)结束后、下一个宏任务开始前执行的。关键点:
-
Promise.resolve().then(...)中的回调,会在本轮同步代码执行完后立刻执行(只要没被其他微任务阻塞) - 多个
.then()链式调用,每个.then()返回的新 Promise 的处理逻辑,也会按顺序入队微任务 - 即使
.then()在Promise.resolve()后“马上”调用,也必须等当前执行栈清空才执行回调
对比:Promise.resolve().then() vs setTimeout
Promise.resolve().then(() => console.log(1)) 会比 setTimeout(() => console.log(2), 0) 更早输出,因为前者是微任务,后者是宏任务。这说明:
- 微任务队列优先级高于宏任务队列
- Promise 的“异步感”来自微任务调度机制,而非定时器或 I/O
-
Promise.resolve()提供了最轻量的“下一轮事件循环”入口,但必须搭配.then()才生效


















