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’

posted @ 2019-05-28 14:40  火鸡的呐喊  阅读(918)  评论(0编辑  收藏  举报