字节跳动前端面试-一面-异步执行顺序题-求解答

最近复习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
请各位大佬指正我的思路是否哪里有问题
#字节跳动##笔试题目#
全部评论
log-promise,async start,log-end,log-promise1-then,promise-resolve,log-timeout。promise是个状态机,而且你都说了是立即执行了,肯定是log-promise先打印啊,而且怎么可能打印多次log-promise和promise-resolve呢
点赞 回复
分享
发布于 2019-07-24 11:51
第一句肯定是 log-promise 啊……,你肯定没手写过 promise。
点赞 回复
分享
发布于 2019-07-24 11:45
联想
校招火热招聘中
官网直投
2楼是正解
点赞 回复
分享
发布于 2019-07-24 12:57
看来头条万年不换题 我当时面试也是这题
点赞 回复
分享
发布于 2019-07-24 13:16
答案可以参考https://segmentfault.com/q/1010000016147496有点绕,打算写篇文章好好讲这个
点赞 回复
分享
发布于 2019-09-28 16:48

相关推荐

点赞 24 评论
分享
牛客网
牛客企业服务