关于Js异步的一些个人理解

115 阅读1分钟

1 前提基础:

  1. 队列:先进先出
  2. new Promise没有await的async函数都是同步代码
  3. setTimeout的执行机制是在到达指定的时间后将回调函数添加到宏任务的Event Queue
  4. 文中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 运用:

QQ图片20220406145412.jpg

4 参考