字节跳动前端面试-一面-异步执行顺序题-求解答
最近复习javascript事件循环的一些面试题,想到当时面试字节跳动(已凉),面试官出了一道题目,如下:
我当时给的答案是:promise.resolve -> async start -> promise.resolve -> log-end -> log promise -> log promise -> log-promise -> promise.resolve -> log-promise1-then -> log-timeout
当时思路是:首先log-timeout是添加到setTimeout队列,比macrotask和microtask都慢;
promise是立即执行,但then是microtask,所以log-promise加入到microtask队列,promise resolve 先输出;
到async这里,async函数在await之前的是立即执行,所以输出async start,然后执行一遍await表达式,就是promise函数:同上log-promise加入到microtask队列,promise resolve 先输出;然后await后面的console.log(str)加入到microtask队列, log-promise -> promise.resolve
然后到promise.then这里, log-promise1-then 加入到microtask队列;
然后是log-end,直接输出;
然后按照先scripts整体代码,后microtask队列,最后setTimeout队列输出,得出结果:promise.resolve -> async start -> promise.resolve -> log-end -> log promise -> log promise -> log-promise -> promise.resolve -> log-promise1-then -> log-timeout
请各位大佬指正我的思路是否哪里有问题
#字节跳动##笔试题目#