看本文之前需要先知道,事件循环与任务队列。网上有很多不错的文章,就不详细赘述了。不熟悉的小伙伴,指路深入理解 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(),变成了微任务。
以上都是自己的理解,如有错误欢迎指出。