关于Js异步的一些个人理解
1 前提基础:
- 队列:先进先出
new Promise和没有await的async函数都是同步代码
setTimeout的执行机制是在到达指定的时间后将回调函数添加到宏任务的Event Queue
- 文中
await下面的内容是指await下面同一级作用域下的所有代码,await后面的表达式是指await后接着的(函数)表达式
2 见解
- Js任务执行顺序:
宏任务=>微任务的Event Queue =>宏任务的Event Queue
Promise.then()会将回调内容放入微任务的Event Queue
await 相当于Promise.then()并且同一级作用域下await下面(不是后面的表达式)的内容全部作为then中的回调内容,会被放入微任务的Event Queue
async中遇到await时,会先执行await后面的表达式(不是下面的内容),该表达式会返回一个Promise对象(没有处理) ,把await同级作用域下下面的内容加入到微任务的Event Queue,跳出async函数,执行队列中的同步任务(宏任务),过程中遇到Promise.then()会继续添加到微任务的Event Queue中,遇到setTimeout会添加到宏任务的Event Queue,执行结束后会将该Promise对象状态设置为fullfilled(即执行了resolve()),然后去执行微任务Event Queue中的任务,再执行宏任务的Event Queue
3 运用:

4 参考