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 相关文章推荐
Ubuntu 16.04 64位中搭建Node.js开发环境教程
Oct 19 Javascript
js处理层级数据结构的方法小结
Jan 17 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
微信小程序url传参写变量的方法
Aug 09 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
Oct 18 Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 Javascript
详解vue中使用微信jssdk
Apr 19 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
Vue清除定时器setInterval优化方案分享
Jul 21 Javascript
vue实现移动端项目多行文本溢出省略
Jul 29 Javascript
纯js+css实现在线时钟
Aug 18 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
生成静态页面的PHP类
2006/11/25 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
如何使用php实现评委评分器
2015/07/31 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
Yii快速入门经典教程
2015/12/28 PHP
js快速排序的实现代码
2013/12/08 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
开源Web应用框架Django图文教程
2017/03/09 Python
python简易远程控制单线程版
2018/06/20 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
django基于restframework的CBV封装详解
2019/08/08 Python
解决python 文本过滤和清理问题
2019/08/28 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
全球工业:Global Industrial
2020/02/01 全球购物
医学专业本科毕业生自我鉴定
2013/12/28 职场文书
国税会议欢迎词
2014/01/16 职场文书
无毒社区工作方案
2014/05/23 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
批评与自我批评范文
2014/10/15 职场文书
先进工作者个人总结
2015/02/15 职场文书
同学聚会通知书
2015/04/20 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle