JS异步宏队列微队列原理详解


Posted in Javascript onSeptember 09, 2020

先看一张我绘制的原理图

JS异步宏队列微队列原理详解

原理图

setImmediate 也是宏任务,在 Node 环境下,微任务还有 process.nextTick

JS 中用来存储待执行回调函数的队列包含 2 个不同特定的列队

  • 宏列队:用来保存待执行的宏任务(回调),比如:定时器回调、DOM 事件回调、ajax 回调微
  • 列队:用来保存待执行的微任务(回调),比如:promise的回调、MutationObserver 的回调

JS 执行时会区别这 2 个队列

  • JS 引擎首先必须先执行所有的初始化同步任务代码
  • 每次准备取出第一个宏任务执行前, 都要将所有的微任务一个一个取出来执行,也就是优先级比宏任务高,且与微任务所处的代码位置无关

下面这个例子可以看出 Promise 要先于 setTimeout 执行

setTimeout(() => { // 立即放入宏队列
  console.log('settimeout callback1()');
}, 0);
setTimeout(() => { // 立即放入宏队列
  console.log('settimeout callback2()');
}, 0);


Promise.resolve(1).then(value => { // 立即放入微队列
  console.log('Promise onResolved1()', value);
})
Promise.resolve(2).then(value => { // 立即放入微队列
  console.log('Promise onResolved2()', value);
})

// Promise onResolved1() 1
// Promise onResolved2() 2
// settimeout callback1()
// settimeout callback2()

全文完。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
JavaScript学习笔记之JS函数
Jan 22 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
Aug 23 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
微信小程序之网络请求简单封装实例详解
Jun 28 Javascript
关于vue的语法规则检测报错问题的解决
May 21 Javascript
vue使用中的内存泄漏【推荐】
Jul 10 Javascript
vue中关闭eslint的方法分析
Aug 04 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
Sep 21 Javascript
vue中的计算属性和侦听属性
Nov 06 Javascript
vue 项目软键盘回车触发搜索事件
Sep 09 #Javascript
基于原生JS封装的Modal对话框插件的示例代码
Sep 09 #Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
Sep 09 #Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 #Javascript
JavaScript代码简化技巧实例解析
Sep 09 #Javascript
vue 手机物理监听键+退出提示代码
Sep 09 #Javascript
关于angular引入ng-zorro的问题浅析
Sep 09 #Javascript
You might like
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP可变变量学习小结
2015/11/29 PHP
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
js实现按座位号抽奖
2017/04/05 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
Python简单遍历字典及删除元素的方法
2016/09/18 Python
Python实现自动发送邮件功能
2021/03/02 Python
django初始化数据库的实例
2018/05/27 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
python爬虫请求头设置代码
2020/07/28 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
PHP中如何使用Cookie
2015/10/28 面试题
团员学习总结的自我评价范文
2013/10/14 职场文书
党员目标管理责任书
2014/07/25 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技