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 相关文章推荐
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 Javascript
Javascript 中的 && 和 || 使用小结
Apr 25 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
JavaScript使用RegExp进行正则匹配的方法
Jul 11 Javascript
你有必要知道的25个JavaScript面试题
Dec 29 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
jQuery Chosen通用初始化
Mar 07 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
Sep 14 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 Javascript
微信小程序中使用vant框架的具体步骤
Feb 18 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
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
PHP explode()函数用法讲解
2019/02/15 PHP
简明json介绍
2008/09/28 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
django 信号调度机制详解
2019/07/19 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
opencv实现图像几何变换
2021/03/24 Python
写自荐信要注意什么
2013/12/26 职场文书
报告会主持词
2014/04/02 职场文书
会计电算化专业求职信
2014/06/10 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
整改通知书格式
2015/04/22 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
计算机实训心得体会
2016/01/14 职场文书
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android