当前位置:网站首页>promise笔记(四)
promise笔记(四)
2022-08-10 16:31:00 【hlz2516】
宏队列与微队列
当js程序执行到异步代码(如定时器,ajax请求等)时,会把异步回调函数放入到队列中,等到同步代码全部执行完后再从队列里取出函数执行。实际上,js有两个队列,分别是宏队列与微队列,宏队列专门放与定时器相关的异步回调,ajax回调,dom事件回调;微队列专门放promise回调和mutation observer回调,关于mutation observer我们现在不用了解,因为这个东西用的很少,所以只需要记住promise是放到微队列就行了。
按照尚硅谷教程的说法,对于异步回调处理流程是这样的:
1. js引擎首先必须先执行所有的初始化同步任务代码
2. 每次准备从宏队列取出一个任务执行前,都要先将所有的微任务一个个取出来执行
为了验证上述流程,我们写一段代码:
Promise.resolve(123).then((value)=>{
console.log('resolved 1',value);
})
setTimeout(() => {
Promise.resolve(456).then((value)=>{
console.log('resolved 2',value);
})
}, 1);
Promise.resolve(789).then((value)=>{
console.log('resolved 3',value);
})
setTimeout(() => {
console.log('setTimeout');
}, 1);分析:
在执行同步代码的过程中,先把第一个值为123的promise放入微队列,再把第一个setTimeout放入宏队列,再把值为789的promise放入微队列,最后把第二个setTimeout放入宏队列。
接下来,先检查一遍微队列里有无待执行函数,发现有,于是取出那个值为123的promise成功回调函数并执行;此时微队列不为空,那么继续取出,789的那个promise成功回调函数执行;此时微队列为空,可以取宏队列了,于是从宏队列取出第一个setTimeout执行,发现有promise,于是把promise放入微队列,执行完毕;此时再检查微队列,发现有新的Promise于是取出执行那个456的回调;之后检查微队列为空,于是回到宏队列取出第二个setTimeout,打印输出;检查宏队列为空,程序结束。
结果:
resolved 1 123
resolved 3 789
resolved 2 456
setTimeout
边栏推荐
- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
- FTXUI按键和ROS2 CLI组合使用笔记(turtlesim+teleop)
- 视频转gif怎样操作?1分钟在线视频转gif制作
- LeetCode-692. Top K Frequent Words
- WIZnet 物联网设计大赛 - WizFi360大赛延迟通知
- 找到一个超级神奇,百试百灵的解决 ModuleNotFoundError: No module named xxx 的方法
- LabView---双通道示波器(内含信号发生器)
- #夏日挑战赛#【ELT.ZIP】啃论文俱乐部——学术科研方法论沉淀辑
- FTXUI基础笔记(botton按钮组件进阶)
- 2022 CCF China Open Source Conference Notice (Fourth Round)
猜你喜欢

v-bind指令:设置元素的属性

2022 CCF China Open Source Conference Notice (Fourth Round)

requests库访问接口

WIZnet 物联网设计大赛 - WizFi360大赛延迟通知

北海 Kraken:基于 Flutter 构建的高性能 Web 渲染引擎

【JDK】Oracle又一个JDK大版本停止扩展技术支持

家电巨头,不碰儿童生意

Yi Gene|In-depth review: epigenetic regulation of m6A RNA methylation in brain development and disease

险资又做LP,一出手40亿

如何修改gif尺寸?1分钟教你快速修改gif尺寸
随机推荐
山西:一煤矿发生死亡1人安全事故 被责令停产整顿
WIZnet 物联网设计大赛 - WizFi360大赛延迟通知
李斌带不动的长安新能源高端梦,华为和“宁王”能救吗?
app自动化测试webview怎么操作
Gif动图如何快速制作?教你1分钟图片合成gif的方法
v-show指令:切换元素的显示与隐藏
【随笔】自己看的... 保存
雷达存在感应器技术,实时感知控制应用,雷达人体探测方案
LeetCode-876. Middle of the Linked List
积分可以当钱用,阿里推出个人「碳账户」
常用持续集成工具对比
Spike project harvest
从宠爱到嫌弃,蒸发1500亿后,这家明星企业为何陨落?
JWT 实现登录认证 + Token 自动续期方案
cube-studio配置镜像仓库并允许
第叁章模块大全之《 os模块》
How to use bitwise operators in C language
个人博客部署注意的几点问题
秘密共享方案介绍SS
v-for指令:根据数据生成列表结构