zoukankan      html  css  js  c++  java
  • async和await的执行顺序问题

    说明 : 要了解执行顺序,所需要的知识是了解浏览器js运行机制,以及微任务和宏任务的先后顺序。如果你明白了宏任务、微任务,请往下看:

    async function async1 () {
             console.log('async1 start')
             await async2();    // 重点
             console.log('async1 end')
         }
         
         async function async2 () {
             console.log('async2')
         }
         
         console.log('script start')
         
         setTimeout(function () {
             console.log('setTimeout')
         }, 0)
         
         async1();
         
         new Promise (function (resolve) {
             console.log('promise1')
             resolve();
         }).then (function () {
             console.log('promise2')
         })
         
         console.log('script end')

    首先根据大家常规理解,异步的先放一放 : 很容易得出 :先执行   console.log('script start') ,然后执行async1()的结论。

    重点分析async1() : 执行 console.log('async1 start'); 执行 await async2(); 运行到await就要注意了,下面的代码会先放一放,会让出线程所以继续执行主线程new Promise和console.log('end');当前线程执行完后返回await继续下面执行 console.log('async1 end'),然后执行微任务then,最后执行宏任务setTimeout,所以...

    ‘script start’

    'async1 start'

    ‘async2’

    ‘promise1’

    ‘script end’

    ‘async1 end’

    ‘promise2’

    ‘setTimeout’

  • 相关阅读:
    stm32学习(一)
    linux驱动之ioctl
    request_threaded_irq()参数
    驱动初步学习
    linux命令操作
    Shell
    进程模块管理
    bash及正规表示法
    python脚本
    Python系统模块os
  • 原文地址:https://www.cnblogs.com/wchjdnh/p/10937282.html
Copyright © 2011-2022 走看看