async在事件循环eventLoop中到底算个啥

558 阅读1分钟

看本文之前需要先知道,事件循环与任务队列。网上有很多不错的文章,就不详细赘述了。不熟悉的小伙伴,指路深入理解 JavaScript 事件循环(一)— event loop.

那么首先事件循环中有两种任务

  • 宏任务:定时器、ajax、事件、UI渲染......
  • 微任务:promise.then()、process.nextTick、Object.observe......

而async的机制是什么呢

async函数的返回值是promise实例;await在async中配合使用时,await后面的代码执行时相当于promise.then()。 也就是说async函数里的代码执行时,实际分了两个部分:await之前的代码、await之后的代码。

  • await之前的代码,就遵循他本身的执行机制,是同步的就是同步的,是定时器就还是定时器,是promise就还是promise。总之,他本身是什么就还是什么。
  • await之后的代码,则是promise.then(),变成了微任务。

以上都是自己的理解,如有错误欢迎指出。