字节前段校招面试题: // 请说出以下代码打印的结果 async functio?

字节前段校招面试题: // 请说出以下代码打印的结果 async functio?

阅读全文
请先 登录 后评论
  • 0 关注
  • 0 收藏 214 浏览
  • 略问用户 提出于 2020-10-22 17:37:28

13 个回答

xxxxxa
从应试角度来讲你只需要知道event loop是分为宏任务(macro-task)和微任务(micro-task),然后清楚各个异步方法都属于那个任务队列。 举个例子:宏任务一般包括整体代码script,setTimeout,setInterval等,微任务一般包括原生Promise的then(),await后的部分,值得注意的是Promise的主体和async中到await的部分属于同步队列。两个队列中代码都是从上往下顺序执行。
请先 登录 后评论
xxxxxa
把async2那个方法的调用写成promise,去掉所有的async和await的关键字,就方便了。async1 end、promise2这两个顺序确定都在script end之后,且setTimeout在这两个之后。
请先 登录 后评论
xxxxxa
记得好像看过这道题,不同nodejs版本输出会有点不一样,主要在promise1 和script end这个的顺序
请先 登录 后评论
xxxxxa
这题应该先问下执行环境...因为 V8 曾经有个 BUG
请先 登录 后评论
xxxxxa
答案有问题,应该是: script start async1 start async2 promise1 script end async1 end promise2 setTimeout 谢谢@1140571314的提醒
请先 登录 后评论
xxxxxa
大哥 你这答案对吗???
请先 登录 后评论
xxxxxa
好人一生单身
请先 登录 后评论
xxxxxa
async函数总是会返回一个promise,settimeout队列的优先级低于promise,new Promise里面调用resolve/reject,promise就会成功/失败,而在调用之前的代码是同步的。
请先 登录 后评论
xxxxxa
Promise是微服务, setTimeout是宏任务 这个去了解下event loop的执行就行了
请先 登录 后评论
xxxxxa
前面两个方法定义,然后script start,setTimeout,0秒后推到宏任务异步队列,调用async 1打印asyn1 start,await async2,包装promise,讲await async2()后面的代码放到.then回调中执行,推到微任务异步队列,async2执行,打印async2,此时async1 end这句在promise.then中,处于异步队列,执行new Promise中的同步线程代码,打印promise1,执行resolve(),将.then推到微任务异步队列,继续执行script end同步线程代码,同步线程空闲,微任务异步队列依次是async1 end和promise2,宏任务异步队列是setTimeout,依次执行就是结果了
请先 登录 后评论