//1functionaxiosGetList(){returnnewPromise((resolve,reject)=>{console.log('axios')resolve(true)})}//2asyncfunctiongetList(){consta=awaitaxiosGetList()if(a){console.log('requestsuccessful')}}//executec()//3functionc(){console.log('cstart')asyncfunctiondd(){consta=awaitgetList()console.log('a:',a)}dd()console.log('cend')}//4newPromise((r,j)=>{console.log('promise1')r()//没有这一行,promise2不会执行}).then(()=>{console.log('promise2')})//5setTimeout(()=>{console.log('settimeout')},0)//6console.log('window')输出结果(GoogleChrome):1,cstart2,axios3,cend4,promise15,window6,请求成功7,promise28,a:undefined9,settimeout第一步:输入c()执行console.log('cstart')第二步:输入dd()执行awaitgetList()输入getList()执行awaitaxiosGetList()输入axiosGetList()执行console.log('axios')第三步:执行完所有的等待,它会跳转到第二步dd()(即第一次执行await的函数首先查找与其(dd())对等体的同步并执行)console.log('cend'),等同级同步执行完毕后,会跳转到外层进行同步【这里提醒一下,await会先被拦截打破下面的程序]第四步:执行最外层newPromise()的console.log('promise1'),此时的then函数不会被执行,这里不再赘述第五步:执行console.log('window')为什么不执行setTimeout?setTimeout总会在最后执行,这里不再赘述。第六步:执行完外层的同步后,会回到调用await的地方,就是回到最后执行await的地方,去执行then方法,在getList()方法中看到,我们是通过赋值得到的。当然也可以写成then的形式,就是awaitaxiosGetList().then(()=>{console.log('requestsuccessful')})第七步:此时thenin之后await执行完,会跳到外层去寻找异步函数并执行,最外层还有一个then函数没有执行,就是console.log('promise2')第8步:好的,内部和外部的then函数执行完后,就可以放心的转到await后面的程序,返回到第一次调用await的地方执行后面的console.log('a',a)。这里的a是未定义的,因为它还没有收到返回值。第九步:执行setTimeout的console.log('settimeout')总结:文章仅为个人总结,不保证100%正确。时时学习,??温故知新
