当前位置:   article > 正文

分享几道async和await的面试题

分享几道async和await的面试题

昨日俊熙没有更新题目,今日咱们继续来看相关题目.

一.第一题

我们来分析一下执行过程:

分析之前我们再来看一张图:

 

分析过程:

1.先打印出1

2.碰到了异步任务定时器,所以放到任务队列中,作为宏任务等候排队.

3.紧接着打印出3.

4.遇到了函数pro,但是并没有调用,所以并不执行,也加到任务队列中.

5.碰到了函数fn,下边也调用了,所以会执行,先输出6,然后函数pro此时得到了调用,所以此时Pro函数开始执行,打印出4,但是由碰到了异步任务resolve('成功'),所以加到任务队列中,但是5还是会在执行出来.

6.再紧接着输出7,到此为此,能执行的全执行出来了,下面该任务队列中的.

7.resolve作为微任务会优先于宏任务,所以接下来会执行成功的响应状态res,也就是输出'成功',最后再执行任务队列中的宏任务,所以输出2.

8.总结:输出顺序是:1 3  6  4  5  7  '成功'  2

验证一下答案:

结论:微任务会在宏任务之前执行.

 

 二.面试题(此题稍微复杂)

 我们来分析一下:

1.还是先输出1.

2.碰到了宏任务定时器,所以放到任务队列中等待执行.

3.new出来一个Promise对象,函数体里的代码会立即执行,所以输出5,但因为碰到了微任务rosolve,所以放到任务队列中,then因为是执行resolve的结果,所以一起到了任务队列中.(此时在你的脑海中应该有这样的画面:任务队列中有两排待执行任务,上边是微任务resolve,下面是宏任务settimeout,微任务会比宏任务先执行).

4.又碰到了一个宏任务定时器,再把它加入到任务队列中.

5.紧接着输出10,此时同步任务已经执行完,接下来都是该分析异步任务了.

6.紧接着该执行resolve了,它是微任务,优先性高,所以输出6.

7.剩下的就是两个宏任务定时器了,先执行第一个加到任务队列中的定时器,所以依次输出2 3 4;

紧接着输出另外一个定时器的结果,7 8 9 .(注意:如果两个定时器都有延时时间,比如说上面的定时器延时5000毫秒,下面的定时器只要比5000毫秒少,就会先执行延时时间短的定时器里的内容,这里需要注意一下).

8.总结结果:1 5 10 6 2 3 4 7 8 9

验证结果:

继续come on!!!

三.面试题 

小伙伴们我们一起来分析一下:

过程:1.首先先执行3,因为他是一个同步任务,输出3.new Promise虽说会立即执行,但由于他包含了一个异步任务, 所以先去任务队列中.任务队列中也有先后顺序,即使第一个Promise对象先过去,但是他里边嵌套着一个新的Promise对象,所以这个新嵌套的Promise对象会排在任务队列的最前面,都是作为微任务而存在.

2.接下来执行任务队列中的异步任务,所以毋庸置疑接下来该输出2,因为在任务队列中他排第一名,紧接着输出1.

3.总结答案: 3 2 1 

验证一下答案:

再来最后一道,小伙伴们!!!

四.面试题

 

这道题有坑,注意!!!

注意事项:这道体有的小伙伴一上来就要输出6,其实不对, 上面那道题之所以把Promise对象放进了任务队列中,本身是由于他要执行异步任务,咱们这道题虽说也包含着异步任务,但毕竟去任务队列之前,有一个console.log(2),所以会先输出2,又因为他里边再次嵌套一个Promise对象,有一个console.log(3),所以会紧接着输出3.

分析过程:1.上边已经解释过了,第一步先输出2,第二步输出3,然后遇见了异步任务,所以进入到了任务队列中.

2.紧接着再输出6.

3.开始执行任务队列中的微任务,输出'p2',为什么是他呢?小伙伴们是否还记得我刚才在上道题的分析,他也作为一个微任务加入到了任务队列中,他是第二次加入,会自动排到第一个Promise对象前,所以先执行,再执行'p1'.

4.微任务都执行完毕后,开始执行宏任务定时器,按照顺序依次执行就好,先输出1 4 5

5.总结答案:2 3 6 'p2' 'p1' 1 4 5

验证一下答案:

你学会了吗?觉得还不错的话可以关注一下奥! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/555096
推荐阅读
相关标签
  

闽ICP备14008679号