Promise执行器先调用resolve再绑定then处理函数的情况叫什么?
已兑现Promise绑定后续回调的情况说明
你遇到的这种情况,是向已处于兑现(fulfilled)状态的Promise添加回调函数,这是Promise设计中的标准行为,没有特别的专属术语,用这个描述即可指代该场景。
代码执行顺序分析
你的示例代码如下:
// FLOW STARTS HERE let promise = new Promise(function(resolve, reject) { // THIS IS THE EXECUTOR, RUN IMMEDIATELY ON PROMISE CONSTRUCTION // THE PROMISE CONSTRUCTOR CALLS THIS FUNCTION, WITH WHAT ARGUMENTS? console.log("inPromise"); resolve(value); // here, what is called? console.log("logged again"); // this is logged }); // CONTROL FLOW CONTINUES promise.then(() => console.log("promise fulfilled")); console.log("hello");
具体执行流程:
- 同步执行
new Promise(),立即调用内部执行器函数,先打印inPromise - 调用
resolve(value)后,Promise状态变为fulfilled,此时无绑定的then回调,resolve的结果会被Promise暂存 - 执行器函数继续执行,打印
logged again后执行完毕 - 执行
promise.then(...):因Promise已处于fulfilled状态,传入的回调被加入微任务队列,等待同步代码执行完毕后处理 - 同步代码继续执行,打印
hello - 同步任务全部完成后,事件循环处理微任务队列,执行
then中的回调,打印promise fulfilled
核心逻辑说明
Promise的设计天然支持延迟绑定回调:无论在Promise状态变更前还是之后绑定then/catch回调,只要状态确定,对应的回调都会被触发——状态一旦变更便不可逆,暂存的结果会在回调绑定后立即安排执行(放入微任务队列)。
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

