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’

  • 相关阅读:
    为什么不要用VSCODE来写Makefile
    JavaFX第三弹
    javaFX文件和文件夹选择器
    写了一个vsftpd的GUI
    在java中调用shell命令和执行shell脚本
    正交投影与斯密特正交化的好处
    Linux下安装软件
    C++中的仿函数
    C++中重载操作符[ ]
    使用斐波那契查找
  • 原文地址:https://www.cnblogs.com/wchjdnh/p/10937282.html
Copyright © 2011-2022 走看看