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 Flash/MP3/Video多媒体插件
Jan 18 Javascript
表单的焦点顺序tabindex和对应enter键提交
Jan 04 Javascript
jquery ajax 如何向jsp提交表单数据
Aug 23 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
jQuery实现的导航下拉菜单效果
Jul 04 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
Vue之Watcher源码解析(1)
Jul 19 Javascript
浅析Vue中method与computed的区别
Mar 06 Javascript
vue使用监听实现全选反选功能
Jul 06 Javascript
JS删除String里某个字符的方法
Jan 06 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
详细分析Node.js 多进程
Jun 22 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自动识别字符集并完成转码详解
2013/08/02 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
JavaScript 拾碎[三] 使用className属性
2010/10/16 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
javascript流程控制语句集合
2017/09/18 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
python使用xmlrpc实例讲解
2013/12/17 Python
Python选课系统开发程序
2016/09/02 Python
用Python实现读写锁的示例代码
2018/11/05 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
python递归法解决棋盘分割问题
2019/07/17 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
2014年圣诞节促销方案
2014/03/14 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
建设工程授权委托书
2014/09/22 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书