我正在使用 Apollo GraphQL 库,并且在某一时刻它返回了一个 promise 。当我在控制台中检查它时,我可以看到这是一个已解决的 promise :
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: Object}
__proto__
:
Promise
[[PromiseStatus]]
:
"resolved"
[[PromiseValue]]
:
Object
但是,当我 Promise.resolve(thatPromise
) 时,我得到了......相同的 promise 。无论我解决 promise 多少次,它都会不断返回 promise ,从而无法访问 promise 的值。
我知道值就在那里(如果我检查[[PromiseValue]]
,它是一个带有值的普通对象)...我只是不知道如何在代码级别而不是在浏览器控制台中。
有没有人遇到过这样的事情,如果是的话,你能弄清楚如何提取这样一个无限解决的 promise 的值(value)吗?
附注我确实尝试过:
thatPromise['[[PromiseValue]]'];
但它似乎是一个特殊的浏览器值,您无法从代码访问。
P.P.S。刚刚意识到这可能是也可能不是一个 promise 。我通过调用response.clone().json()来获得它,所以虽然它看起来像一个 promise ,但也许它只是一个 promise 的克隆,在这种情况下,这可能解释为什么我无法解析它。但是,它没有解释我如何提取该值。
编辑
我认为这里发生了奇怪的事情,我不会报告所有相关细节。一旦我更好地解决问题,我就会发布更多信息(不想让任何人白费力气)。
最佳答案
您没有理由必须调用 Promise.resolve
来获取该值。请记住 Promise 是异步的。您必须像这样访问它的值:
myPromise.then(value => {
console.log(value)
// do whatever you're going to do with value
};
您可以在[此处][1]阅读有关 Promise 工作原理的更多信息。
关于javascript - 如何解决无限 Javascript promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45267646/