如何解决无限 Javascript 承诺?

How do I resolve an infinite Javascript promise?

我正在使用 Apollo GraphQL 库,并且在某一时刻它 returns 一个承诺。当我在控制台中检查它时,我可以看到它是一个已解决的承诺:

Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: Object}
__proto__
:
Promise
[[PromiseStatus]]
:
"resolved"
[[PromiseValue]]
:
Object

然而,当我 Promise.resolve(thatPromise) 我回来时......同样的承诺。无论我 resolve 多少次 promise,它都会返回一个 promise,导致无法访问 promise 的值。

我知道值在那里(如果我检查 [[PromiseValue]] 它是一个带有值的普通对象)......我只是不知道如何在代码级别而不是在浏览器控制台。

有没有人 运行 参与过这样的事情,如果有,你能弄清楚如何提取这种无限解决承诺的价值吗?

P.S。我试过了:

thatPromise['[[PromiseValue]]'];

但它似乎是您无法从代码访问的特殊浏览器值。

P.P.S。刚刚意识到这可能是也可能不是真正的承诺。我通过调用 response.clone().json() 获得它,所以虽然它看起来像一个承诺,但它可能只是一个承诺的克隆,在这种情况下,这可以解释为什么我无法解决它。但是,它没有解释我如何提取值。

编辑

我认为这里发生了一些奇怪的事情,我没有报告所有相关细节。一旦我更好地解决问题,我会 post 更多信息吗(不想让任何人陷入困境)。

您没有理由必须调用 Promise.resolve 来获取值。请记住,Promises 是异步的。您必须像这样访问它的值:

myPromise.then(value => {
  console.log(value)
  // do whatever you're going to do with value
};

您可以在 [此处][1] 阅读更多有关 Promise 工作原理的信息。