【发布时间】:2017-12-29 06:36:42
【问题描述】:
我正在使用 Apollo GraphQL 库,并且在某一时刻它返回了一个承诺。当我在控制台中检查它时,我可以看到它是一个已解决的承诺:
Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: Object}
__proto__
:
Promise
[[PromiseStatus]]
:
"resolved"
[[PromiseValue]]
:
Object
然而,当我Promise.resolve(thatPromise) 我回来了......同样的承诺。无论我解决多少次promise,它都会不断返回一个promise,从而无法访问promise的值。
我知道值在那里(如果我检查 [[PromiseValue]] 它是一个带有值的普通对象)......我只是不知道如何在代码级别而不是在浏览器控制台中获取它。
有没有人遇到过这样的事情,如果有的话,你能弄清楚如何提取这种无限解决的承诺的价值吗?
附:我确实尝试过:
thatPromise['[[PromiseValue]]'];
但它似乎是一个特殊的浏览器值,您无法从代码中访问。
附言刚刚意识到这可能是也可能不是一个承诺。我通过调用response.clone().json() 得到它,所以虽然它看起来像一个承诺,但它可能只是一个承诺的克隆,在这种情况下,这可以解释为什么我无法解决它。但是,它没有解释我如何提取值。
编辑
我认为这里发生了一些奇怪的事情,我没有报告所有相关细节。一旦我把事情整理得更好,就会发布更多信息(不想让任何人胡思乱想)。
【问题讨论】:
-
我对您的尝试感到有些困惑。 'Promise.resolve(thatPromise)' 应该返回你传入的内容。它不解决参数 - 它创建一个立即解决参数的承诺。因此,如果你通过它一个承诺,你会得到一个承诺。
-
我认为因为它是一个承诺(或其他东西)的克隆,所以 Promise.resolve 只是返回值本身......它以某种方式包装了一个像 Promise 一样的值,但不像 Promise 那样可解析。
-
No Promise.resolve() 不返回原始值,它返回一个承诺。看这里:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
祝你好运!希望你能弄清楚。
-
呃猜我不能删除;而是留下了编辑评论。
标签: javascript promise apollo react-apollo