Day47/100 (常考题)Promise和Async awa
写在前面的话
今儿是一道前端面试常考题(亲测)
(一)题目
笔试一般会考,console.info打印的顺序,代码类似如下
async function async1(){
console.info('async1 start')
await async2();
console.info('async1 end')
}
async function async2(){
console.info('async2')
}
console.log('script start')
setTimeout(function(){
console.info('setTimeOut')
},0)
async1();
new Promise(function(resolve){
console.info('promise1')
resolve()
}).then(function(){
console.info('promise2')
})
console.log('script end')
面试一般会问Promise的用法,和Async Await的区别;
再底层些会问宏任务和微任务;
再底层些会问浏览器事件原理,Evenloop;
(二)思路
先说结果,运行结果如下
以上文中的代码为例,
1、在本次队列中
两个异步队列加载到队列中,但并未执行,所以不打印;
setTimeOut在宏任务中执行(最后执行,所以不打印)
【关于什么是宏任务可访问 https://mp.csdn.net/console/editor/html/108479599】
先打印script start;
然后执行async1()
有一个是腾讯笔试中考到,也是特别容易出错的一点是, await直接跟的是先执行,之后的语句才会挂载;
So 接下来打印async2
然后是Promise1,
script end
2、接下来执行微任务中的队列
async1 end
promise2
3、最后执行宏任务的队列
setTimeOut
以上
参考链接
https://segmentfault.com/a/1190000016788484
https://segmentfault.com/a/1190000017224799