JavaScript中的宏任务和微任务详情


Posted in Javascript onNovember 27, 2021

1、微任务有哪些

Promise

awaitasync

2、宏任务有哪些

setTimeout

setInterval

  • DOM事件
  • AJAX请求

3、案例

<script>

console.log(1)

setTimeout(()=>{

    console.log("2")

},0)

Promise.resolve().then(()=>{

    console.log('3')

})

console.log(4)

</script>

我们发现打印的顺序是1-4-3-2

为什么是这样的顺序?

先打印1-4这肯定是没有问题的

为啥先打印3然后才是2

因为3是Promise,Promise是微任务。

2是setTimeout,它是宏任务

微任务的执行时机比宏任务早。

所以先执行的是3然后才是2

JavaScript中的宏任务和微任务详情

3.1 结论

  • 先同步后异步,先微后宏
  • 微任务的执行时机比宏任务早哈~

4、代码案例

<body>

    <div id="app"></div>

<script>

// 这一段是dom渲染的

let app=document.getElementById("app")

let cont='<p>我是p标签</p>'

app.append(cont)

// dom渲染结束



console.log(1)

setTimeout(()=>{

    console.log("2")

    alert('setTimeout2')

},0)

Promise.resolve().then(()=>{

    console.log('3')

    alert('3')

})

console.log(4)

</script>

</body>

4.1 代码分析

上面这一段代码的执行分析:

肯定是先执行1-4

然后根据先微任务后宏任务

就是输出3然后弹出3

然后就是说输出2然后弹出setTimeout2 【错误的】

因为微任务和宏任务之间还有一个DOM渲染

所以然后是dom渲染,最后才是宏任务

所以输出1-4后,执行的是DOM渲染。

然后才是输出2然后弹出setTimeout2

4.2 结论和运用的场景

微任务》DOM渲染》宏任务 看下面的例子

这个结论的运用场景

我们都做过echarts.我们知道渲染echarts的时候。

需要页面的DOM渲染完毕后,才能拿到节点进行渲染。

所以有的小伙伴会请请求的时机放在monuted()这个生命周期中

这样就可以确保返回来的数据肯定能够正常渲染在页面上。

其实根据上面这个结论。

你完全可以在created中去请求数据。返回来的的时候。

DOM肯定渲染完了。因为请求是宏任务。

宏任务的执行时机是在DOM渲染后的哈

到此这篇关于JavaScript中的宏任务和微任务详情的文章就介绍到这了,更多相关JavaScript中的宏任务和微任务内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
csdn 博客的css样式 v3
Feb 24 Javascript
jquery模拟按下回车实现代码
Sep 20 Javascript
jQuery contains过滤器实现精确匹配使用方法
Apr 12 Javascript
js 时间格式与时间戳的相互转换示例代码
Dec 25 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
Oct 21 Javascript
AngularJS 霸道的过滤器小结
Apr 26 Javascript
详解微信小程序Page中data数据操作和函数调用
Sep 27 Javascript
javascript函数的节流[throttle]与防抖[debounce]
Nov 15 Javascript
详解如何在angular2中获取节点
Nov 23 Javascript
vue router 配置路由的方法
Jul 26 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 Javascript
Ajax获取node服务器数据的完整步骤
Sep 20 Javascript
前端监听websocket消息并实时弹出(实例代码)
Vue实现跑马灯样式文字横向滚动
Nov 23 #Vue.js
利用js实现简单开关灯代码
Nov 23 #Javascript
详解Vue的列表渲染
Nov 20 #Vue.js
详解JS数组方法
Nov 20 #Javascript
详解Vue slot插槽
Nov 20 #Vue.js
详解Vue router路由
Nov 20 #Vue.js
You might like
PHP VS ASP
2006/10/09 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
2011/05/18 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
javascript按位非运算符的使用方法
2013/11/14 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
jQuery实现自定义下拉列表
2015/01/05 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
nodejs中使用worker_threads来创建新的线程的方法
2021/01/22 NodeJs
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
Laravel中Kafka的使用详解
2021/03/24 PHP
试用期员工考核制度
2014/01/22 职场文书
公司保密承诺书
2014/03/27 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
探讨Java中的深浅拷贝问题
2021/06/26 Java/Android
win sever 2022如何占用操作主机角色
2022/06/25 Servers