[学习笔记]微任务和宏任务的输出顺序

本文探讨了JavaScript中的事件循环机制,详细解释了微任务(如Promise和async/await)与宏任务(如setTimeout)的执行顺序。在事件循环过程中,同步代码执行完成后,会先处理微任务,然后才执行宏任务。通过一个示例展示了Promise、async函数和setTimeout的输出顺序,帮助读者深入理解这一关键概念。
摘要由CSDN通过智能技术生成

本来标题是 ‘[学习笔记] Promise, async/await, setTimeout的输出顺序’, 结果因为限制长度太长就改成现在这个标题…

1. 事件循环, 微任务,宏任务

要弄清楚 Promise,async/await, setTimeout() 这三者函数体内的输出顺序, 首先要了解他们在事件循环中扮演的角色

异步任务:

  • 微任务: Promise(), async/await
  • 宏任务: setTimeout(), setInterval(), Ajax请求, DOM事件

事件循环简要流程:
(注: 微任务是ES6规定的, 为了执行微任务, ES6再专门规定一个micro task queue来执行微任务, 而宏任务是浏览器规定的, 放进Callback queue)

  1. 执行同步代码,一行一行放进Call stack里面执行
  2. 遇到异步任务先"记录",
  3. Call stack里面的同步任务执行完之后,在"记录"下来的异步任务里面寻找微任务
  4. 将微任务 (Promise, async/await) 放进 micro task queue 中, 然后push进Call stack执行
  5. 当微任务执行完毕后,尝试进行DOM渲染
  6. 最后触发事件循环机制,将异步任务里面的宏任务调出放进Callback queue
  7. 按顺序push进Call stack 执行代码

2. Promise() ,async/await, setTimeout() 的输出顺序

了解完事件循环过程后, 来看Promise() ,async/await, setTimeout() 的输出顺序:
**数字代表输出顺序

//注意:即使async/await是异步任务的微任务(按照事件循环机制,同步代
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值