【前端每天一题】 第 5 题:Promise.then 执行顺序深入题(微任务队列机制)

事件循环第 5 题:Promise.then 执行顺序深入题(微任务队列机制)

这是事件循环中最常考、最容易写错的一题之一。

🎯 面试题:下面这段代码的执行顺序是什么?为什么?

javascript 复制代码
Promise.resolve().then(() => {
  console.log(1)
  Promise.resolve().then(() => console.log(2))
})
console.log(3)

✅ 标准答案

输出顺序:

复制代码
3
1
2

✅ 详细解析(面试官最喜欢的回答)

第一步:同步任务先执行

同步代码只有:

javascript 复制代码
console.log(3)

所以第一个输出:

复制代码
3

第二步:微任务队列分析

(1) 首先有一个微任务:
javascript 复制代码
Promise.resolve().then(() => {...})

此时微任务队列:

css 复制代码
[ taskA ]

执行 taskA(也就是外层的 then 回调):

javascript 复制代码
console.log(1)
Promise.resolve().then(() => console.log(2))

所以现在输出:

复制代码
3
1
(2) taskA 内又创建了一个新的微任务

这段代码:

javascript 复制代码
Promise.resolve().then(() => console.log(2))

把另一个微任务加入队列:

css 复制代码
[ taskB ]

事件循环会继续执行此轮的所有微任务,所以执行:

复制代码
2

最终输出:

复制代码
3
1
2

📌 关键记忆点(速记卡)

🔶 速记 1:微任务是"批处理"执行的

  • 宏任务执行完后,所有微任务会连续执行
  • 微任务内部再创建的微任务,会排到队列末尾但仍在本轮执行

🔶 速记 2:Promise.then 永远是微任务

🔶 速记 3:执行顺序优先级

顺序永远是:

  1. 同步任务
  2. 本轮所有微任务
  3. 下一轮宏任务(如 setTimeout)
相关推荐
uzong2 小时前
一个好的面试官,应该让候选人感到被尊重
面试
咩咩啃树皮4 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny4 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端
触底反弹4 小时前
一文搞懂 Tailwind CSS 弹性布局:从原理到实战
前端·css·html
阳光是sunny4 小时前
从链到图:LangGraph 入门基础全解析
前端·人工智能·后端
小林ixn5 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
REDcker5 小时前
显示分辨率标准对照详解
前端·网络·分辨率·显示·屏幕
এ慕ོ冬℘゜5 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery
触底反弹5 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
武子康6 小时前
Search Console Platform Properties 扩大 SEO 资产边界:从 Page Ranking 到 Topic Coverage(5 类误读边界 + 3 表数据层设计)
前端·人工智能·后端