为什么 thenables return 基于与 thenable 相同的承诺的承诺不起作用

Why are thenables that return a promise based on the same promise as the thenable not working

一个 promise p1 与一个 thenable 链接在一起 returns 又是一个链接的 promise p2p2p1 与 console.log 语句链接:

    p0 = Promise.resolve();
    p1 = p0.then(() => {
      console.log("Step1");
      p2 = p1.then(() => {
        console.log("Step2");
      });
      return p2;
    });

我希望代码输出“Step1”和“Step2”。但它只显示“Step1”。谁能解释一下,为什么?

我知道 then() 通常像 (p0.then(...).then(...)) 一样链接。所以这个问题不是改代码让它运行,而是为什么不行.

您已经创建了相互依赖的承诺以解决问题,因此两者都没有解决。

当您从 .then 中 return 一个 Promise 时,.then 解析到的 Promise 将仅在 returned Promise 完成时完成。所以

p1 = p0.then(() => {
  // ...
  return p2;
});

意味着 p1 只会在以下情况下解析:

  • 首先,p0解析
  • 秒,p2解析

但由于

,p2 仅在 p1 解析后才解析
p2 = p1.then(() => {

所以都没有解决。 Step1 被记录因为 p0 解析了,但是 Step2 没有因为 p1 和 p2 都没有解析。