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 相关文章推荐
基于Jquery的文字自动截取(提供源代码)
Aug 09 Javascript
javascript中类的定义方式详解(四种方式)
Dec 22 Javascript
jQuery siblings()用法实例详解
Apr 26 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
Dec 30 Javascript
vue用递归组件写树形控件的实例代码
Jul 19 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
js实现拖动缓动效果
Jan 13 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
Map与WeakMap类型在JavaScript中的使用详解
Nov 18 Javascript
angular *Ngif else用法详解
Dec 15 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
漂亮但不安全的CTB
2006/10/09 PHP
php 获取当前访问的url文件名的方法小结
2010/02/08 PHP
php实现httpclient类示例
2014/04/08 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
python分割文件的常用方法
2014/11/01 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
美国电视购物HSN官网:HSN
2016/09/07 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
教学改革实施方案
2014/03/31 职场文书
预备党员转正考核材料
2014/06/03 职场文书
投资意向书
2014/07/30 职场文书
环保项目建议书
2014/08/26 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书
Django如何与Ajax交互
2021/04/29 Python
Javascript 解构赋值详情
2021/11/17 Javascript