问答题875/1593【Promise第八题】下面代码的输出是什么?

1const promise = new Promise((resolve, reject) => { 2 console.log(1); 3 setTimeout(() => { 4 console.log("timerStart"); 5 resolve("success"); 6 console.log("timerEnd"); 7 }, 0); 8 console.log(2); 9}); 10promise.then((res) => { 11 console.log(res); 12}); 13console.log(4);
难度:
2022-01-09 创建

参考答案:

解析

  • 从上至下,先遇到new Promise,执行该构造函数中的代码1
  • 然后碰到了定时器,将这个定时器中的函数放到下一个宏任务的延迟队列中等待执行
  • 执行同步代码2
  • 跳出promise函数,遇到promise.then,但其状态还是为pending,这里理解为先不执行
  • 执行同步代码4
  • 一轮循环过后,进入第二次宏任务,发现延迟队列中有setTimeout定时器,执行它
  • 首先执行timerStart,然后遇到了resolve,将promise的状态改为resolved且保存结果并将之前的promise.then推入微任务队列
  • 继续执行同步代码timerEnd
  • 宏任务全部执行完毕,查找微任务队列,发现promise.then这个微任务,执行它。

结果

1
2
4
"timerStart"
"timerEnd"
"success"

最近更新时间:2024-07-20

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!