文章 评论 浏览 31
**很多人以为await会一直等待之后的表达式执行完之后才会继续执行后面的代码,实际上await是一个让出线程的标志。await后面的函数会先执行一遍,然后就会跳出整个async函数来执行后面的代码。等本轮事件循环执行完了之后又会跳回到async函数中执行后面的代码。那么async在await后,它是属于macro task还是micro task。如果是micro task,为什么会比promose慢,如果是macro task,为什么会比settimeout快?取决于async函数里面的内容,里面是同步代码就立即执行,异步就加入到任务队列。文章中有写,变式2也有论证~我说的是await后面的代码,比如下面这个:
**很多人以为await会一直等待之后的表达式执行完之后才会继续执行后面的代码,实际上await是一个让出线程的标志。await后面的函数会先执行一遍,然后就会跳出整个async函数来执行后面的代码。等本轮事件循环执行完了之后又会跳回到async函数中执行后面的代码。那么async在await后,它是属于macro task还是micro task。如果是micro task,为什么会比promose慢,如果是macro task,为什么会比settimeout快?取决于async函数里面的内容,里面是同步代码就立即执行,异步就加入到任务队列。文章中有写,变式2也有论证~
**很多人以为await会一直等待之后的表达式执行完之后才会继续执行后面的代码,实际上await是一个让出线程的标志。await后面的函数会先执行一遍,然后就会跳出整个async函数来执行后面的代码。等本轮事件循环执行完了之后又会跳回到async函数中执行后面的代码。那么async在await后,它是属于macro task还是micro task。如果是micro task,为什么会比promose慢,如果是macro task,为什么会比settimeout快?
取决于async函数里面的内容,里面是同步代码就立即执行,异步就加入到任务队列。文章中有写,变式2也有论证~
我说的是await后面的代码,比如下面这个:
这里的console.log('async1 end')是属于macrotask中的script队列中的,因为script队列在setTimout队列前面,所以会比setTimout先输出。也可以理解为是同步代码,所以先输出。(老哥发现好像是校友啊...)
console.log('async1 end')
const minIndex = (arr) => arr.reduce((num, v, i) => v > 0 && v < arr[num] ? i : num, 0)
文章 0 评论 0
接受
这里的
console.log('async1 end')
是属于macrotask中的script队列中的,因为script队列在setTimout队列前面,所以会比setTimout先输出。也可以理解为是同步代码,所以先输出。(老哥发现好像是校友啊...)第 10 题:常见异步笔试题,请写出代码的运行结果