当前位置: 首页 > news >正文

6.promise在哪个线程执行?(2)

😺😺Promise 本身的执行、回调注册、状态改变 都在主线程进行。
真正的“异步”工作(比如请求、定时器、文件读写)由浏览器或 Node 的后台线程/模块处理完成,完成后通过事件队列再通知主线程执行后续逻辑**。

JS 只有一个主线程,但它背后站着一群“打下手”的模块帮它做事(比如 I/O、定时器)!

😺😺 用图理解(文字版图示)

JS主线程(运行 JS 代码)

├─ 执行 Promise 代码(同步部分)

├─ 发出异步请求(如 Ajax、setTimeout)

└─ 把“回调函数”交给浏览器或 Node 的“异步模块”处理

[浏览器/Node 异步模块,如 libuv、Web APIs]
↓(一段时间后)
结果准备好了!

把回调放入“事件队列”(任务队列)

[主线程空了? → 从队列中取出 → 执行 then() 的回调]

😺😺例子解释

console.log(‘1’);

setTimeout(() => {
console.log(‘2’);
}, 0);

Promise.resolve().then(() => {
console.log(‘3’);
});

console.log(‘4’);

输出是:

1
4
3
2

解释:

阶段 发生了什么
主线程执行 打印 1
注册 setTimeout 回调 交给浏览器 Web API 模块处理
注册 Promise.then 回调 加入 微任务队列
打印 4
主线程空了,先执行微任务队列 打印 3
然后执行宏任务队列中的 setTimeout 回调 打印 2

😺😺总结
在这里插入图片描述

😺😺什么是微任务队列?

微任务队列(Microtask Queue):是一个专门用于存放**“Promise 的回调函数”**等细粒度任务的小任务队列。
它的执行优先级比普通的回调(如 setTimeout)更高。

JavaScript 任务队列分类(一定要知道)

在这里插入图片描述

😺 举个例子说明执行顺序

console.log(‘1’);

setTimeout(() => {
console.log(‘2’);
}, 0);

Promise.resolve().then(() => {
console.log(‘3’);
});

console.log(‘4’);

输出顺序是:

1
4
3 ← 微任务
2 ← 宏任务

因为:
• Promise.then() 里的任务进了微任务队列
• setTimeout 的回调进了宏任务队列
• 当前事件循环中,先清空微任务队列,再执行下一个宏任务

😺😺那这个“微任务队列”的能力是谁赋予的?
答案是:JavaScript 引擎(如 V8)+ 执行环境(如浏览器、Node.js)共同实现了事件循环机制,包括微任务队列的调度。

分工如下:

在这里插入图片描述

😺所以总结来说:

微任务队列是JavaScript 运行时环境中的一个调度机制,用于安排那些紧接着当前执行完成后就要执行的任务。

“同步完了立刻清微任务,微任务清完才轮宏任务。”

😺demo:如何手动创建微任务?

queueMicrotask(() => {
console.log(‘我是一个微任务’);
});

它跟 .then() 效果一样,只不过不依赖 Promise。

需要我给你配一个浏览器事件循环调度过程的动画图吗?或者写个 async/await + 微任务 + 宏任务顺序的例子?你一看就懂。

举个例子说明执行顺序

console.log(‘1’);

setTimeout(() => {
console.log(‘2’);
}, 0);

Promise.resolve().then(() => {
console.log(‘3’);
});

console.log(‘4’);

输出顺序是:

1
4
3 ← 微任务
2 ← 宏任务

因为:
• Promise.then() 里的任务进了微任务队列
• setTimeout 的回调进了宏任务队列
• 当前事件循环中,先清空微任务队列,再执行下一个宏任务

相关文章:

  • [Java 基础]面向对象-封装
  • 滑动智能降级:Glide优化加载性能的黑科技
  • 代码随想录刷题day29
  • JavaWeb:前后端分离开发-部门管理
  • 62、Consul服务注册中心
  • powershell 安装 .netframework3.5
  • Java观察者模式深度解析:构建松耦合事件驱动系统的艺术
  • Viggle:开启视频人物替换新纪元
  • Python训练营打卡 Day44
  • HTB 靶机 SolarLab Write-up(Medium)
  • 【免费数据】1980-2022年中国2384个站点的水质数据
  • ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台
  • MySQL补充知识点学习
  • 聚沙成塔,三步成书:GitBook极简入门教程
  • 【操作系统】基础回顾(一)
  • OpenHarmony 5.0横竖屏界面适配
  • OD 算法题 B卷【排队游戏】
  • day19 leetcode-hot100-37(二叉树2)
  • dify中解决docx上传文件报错问题
  • NC28 最小覆盖子串【牛客网】
  • 完善网站建设的必要性/安卓优化大师清理
  • 南通网站建设教程/网站建站系统
  • 佛山公司网站设计团队/百度推广退款电话
  • 钦州网站建/网络营销公司排名
  • 网站支付链接怎么做的/网络营销实施方案
  • 网站建设费/关键词排名推广