}"?-6ren"> }"?-我知道这个问题在 stackoverflow 上被问了很多,我已经搜索了很多但仍然无法理解。 async function testFunc() { var test = await getSom-6ren">
gpt4 book ai didi

javascript - 为什么我从 repl.it 上的这段代码中看到 "Promise { }"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:56:45 25 4
gpt4 key购买 nike

我知道这个问题在 stackoverflow 上被问了很多,我已经搜索了很多但仍然无法理解。

async function testFunc() {
var test = await getSomething();
//test.resolve();
console.log("hello" + test);
return "";
}
testFunc().then(token => {}).catch(x => {});

function getSomething() {
return "ex";
}

在大多数答案中,建议使用 .then() 来解决 promise ,但我已经这样做了,但我仍然得到待处理的 promise 。这有什么问题吗?

https://repl.it/repls/UntrueLankySorting 上测试了这个

它向我展示了这个:

helloex=> Promise { <pending> }

最佳答案

Tested this on https://repl.it/repls/UntrueLankySorting

它向您显示调用 catch 的结果:

testFunc().then(token => {}).catch(x => {});

你不在乎那个 promise ,只是那个环境向你展示了它。当 catch 返回时,它确实是一个未决的 promise ,但它会在稍后解决。

这只是您运行它的环境的一个方面。除了我在评论中提到的问题(getSomething 不返回 promise ,所以没有必要等待它)。

在您提出的评论中:

Would catch return in this case? Since no error is thrown it should resolve at then right?

thencatch 总是返回一个 promise 。他们返回的 promise 得到解决或拒绝,具体取决于您调用 then/catch 的 promise 发生了什么,以及如果他们的处理程序运行,处理程序中发生了什么以及它返回。

在此示例中,代码的作用如下:

  1. 调用 testFunc 并获得它返回的 promise (async 函数总是返回 promise )。将该 promise 称为 A。
  2. 在 Promise A 上调用 thenthen 返回一个新的 Promise(Promise B)。
  3. 在 Promise B 上调用 catchcatch 返回一个新的 promise (Promise C)。
  4. repl.it 向您显示 Promise C,此时处于待定状态。¹
  5. Promise A fulfills²,调用 then 处理程序。 then 处理程序(有效地)返回 undefined
  6. 用值 undefined 实现 Promise B,后者实现 Promise C(不调用 catch 处理程序,因为 promise 已实现,而不是被拒绝)。

¹ 允许实现在此处显示已完成状态,而不是在此示例中,但出于所有意图和目的,最好将 promise 视为此时未决。由于代码永远无法直接观察 promise 的状态,因此您的代码无法区分两者。

² 类似地,如果它在 then 被调用之前已经完成,那是允许的,但同样你永远无法直接在代码中看到它,所以......

关于javascript - 为什么我从 repl.it 上的这段代码中看到 "Promise { <pending> }"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55275392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com