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 相关文章推荐
ECMAScript 创建自己的js类库
Nov 22 Javascript
JavaScript实现QueryString获取GET参数的方法
Jul 02 Javascript
JS实现距离上次刷新已过多少秒示例
May 23 Javascript
灵活的理解JavaScript中的this指向
Feb 25 Javascript
jQuery获取父元素及父节点的方法小结
Apr 14 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
May 16 Javascript
jquery层级选择器的实现(匹配后代元素div)
Sep 05 Javascript
Angular路由简单学习
Dec 26 Javascript
使用vue-cli编写vue插件的方法
Feb 26 Javascript
ionic grid(栅格)九宫格制作详解
Jun 30 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
Nov 01 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 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数组无限分级数据的层级化处理代码
2012/12/29 PHP
div移动 输入框不能输入的问题
2009/11/19 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
高一数学教学反思
2014/02/07 职场文书
节能环保标语
2014/06/12 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
家属慰问信
2015/02/14 职场文书
因公司原因离职的辞职信范文
2015/05/12 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
python for循环赋值问题
2021/06/03 Python
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers