当前位置:   article > 正文

今日头条async/await面试题执行顺序_await下一行 与then 谁先执行

await下一行 与then 谁先执行
  1. async function async1 () {
  2. console.log('async1 start')
  3. await async2();
  4. console.log('async1 end')
  5. }
  6. async function async2 () {
  7. console.log('async2')
  8. }
  9. console.log('script start')
  10. setTimeout(function () {
  11. console.log('setTimeout')
  12. }, 0)
  13. async1();
  14. new Promise (function (resolve) {
  15. console.log('promise1')
  16. resolve();
  17. }).then (function () {
  18. console.log('promise2')
  19. })
  20. console.log('script end')

运行结果:

  1. script start
  2. async1 start
  3. async2
  4. promise1
  5. script end
  6. promise2
  7. async1 end
  8. setTimeout

首先,要理解宏任务队列和微任务队列,宏任务是代码执行的主线,本来只有一条宏任务线,但如果遇到 setTimeout 之类的就会新建一个宏任务线,然后每个宏任务里面会有一个微任务队列,宏任务在执行过程中如果遇到promise.then()之类的微任务,就会推到当前宏任务的微任务队列当中,在本轮宏任务的同步代码执行完之后,依次执行微任务

首先执行打印script start

然后来到了setTimeout, 新建一条宏任务,排在第一条宏任务后面

执行async1,打印async1

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/555093
推荐阅读
相关标签
  

闽ICP备14008679号