为什么 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 p2
。
p2
是 p1
与 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 都没有解析。
一个 promise p1
与一个 thenable 链接在一起 returns 又是一个链接的 promise p2
。
p2
是 p1
与 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 都没有解析。