Promise如何在javascript中工作

问题描述 投票:0回答:1
Promise
.resolve()
.then(() => console.log(1))
.then(() => console.log(2))
.then(() => console.log(3));

Promise
.resolve()
.then(() => console.log(4))
.then(() => console.log(5))
.then(() => console.log(6));

答案:1 4 2 5 3 6

有人可以向我解释一下它如何工作吗?

为什么不执行1,2,3,4,5,6

javascript es6-promise
1个回答
1
投票

A .then回调在微任务中运行,仅在当前运行的同步代码完成后才运行。在此,同步代码使用Promise.resolve初始化两个立即可解决的Promises。

微任务按顺序解析,因此在脚本末尾,队列中有两个微任务:放在队列中的第一个微任务是() => console.log(1),因此首先进行记录。此时,1的Promise被解决,因此下一个.then2)被放入微任务队列。放在队列中的第二个是() => console.log(4),因此第二个被记录,并且5被放入微任务队列。然后2运行并将其下一个.then推送到队列(3),然后4运行并将其下一个.then6)推送到队列。等

// queue:
[1, 4]
// 1 gets logged
// 2 gets pushed
[4, 2]
// 4 gets logged
// 5 gets pushed
[2, 5]
// 2 gets logged
// 3 gets pushed
[5, 3]
...

如果您在等待第二个Promise.resolve之前一直等待第一个Promise的整个Promise链完全解决,那么它们都会按照您的期望按顺序运行:

(async () => {
  await Promise
  .resolve()
  .then(() => console.log(1))
  .then(() => console.log(2))
  .then(() => console.log(3));

  await Promise
  .resolve()
  .then(() => console.log(4))
  .then(() => console.log(5))
  .then(() => console.log(6));
})();
© www.soinside.com 2019 - 2024. All rights reserved.