var aaa=function(data){
bbb().then(()=>{
console.log(4)
})
console.log(3)
}
var bbb= async function (){
console.log(1)
await ccc();
console.log(2)
}
var ccc=function(){
console.log(5)
}
aaa() // 1 5 3 2 4
输出结果是 1 5 3 2 4
为什么不是 1 5 2 3 4 ?
整体流程是这样的。aaa整个执行流程分为3个同步代码段。
1:进入aaa->进入bbb->log(1)->进入ccc->log(5)->遇到await,bbb挂起退出到aaa->注册then回调->log(3)->aaa执行完毕退出
2:事件循环调起bbb继续执行->log(2)->bbb执行完毕退出
3:事件循环调起then回调->log(4)->执行完毕退出
所以是15324,其中很关键的一点就是async方法执行到await后会主动挂起等待调度。