簡體   English   中英

如何解決無限的Javascript承諾?

[英]How do I resolve an infinite Javascript promise?

我正在使用Apollo GraphQL庫,有一次它返回了一個Promise。 在控制台中檢查它時,我可以看到它是一個已解決的承諾:

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

但是,當我Promise.resolve(thatPromise )時,我得到了……同樣的承諾。 無論我解決承諾多少次,它都會不斷返回承諾,從而無法獲取承諾的價值。

我知道值在那里(如果我檢查[[PromiseValue]]這是一個帶有值的普通對象)...我只是想不出如何在代碼級而不是在瀏覽器控制台中獲取它。

有沒有人碰到過這樣的事情,如果是這樣的話,您是否能夠弄清楚如何提取這種無限解決的諾言的價值?

PS我確實嘗試過:

thatPromise['[[PromiseValue]]'];

但它似乎是您無法從代碼中訪問的特殊瀏覽器值。

PPS剛意識到這實際上可能不是一個承諾。 我通過調用response.clone().json()獲得它,因此,雖然看起來像一個承諾,但它可能只是承諾的一個克隆,在這種情況下,這也許可以解釋為什么我無法解決它。 但是,它沒有解釋我如何提取值。

編輯

我認為這里很奇怪,我沒有報告所有相關細節。 我會更好地解決問題時將發布更多信息(不想派人追趕鵝)。

您沒有理由必須致電Promise.resolve來獲取價值。 請記住,承諾是異步的。 您必須像這樣訪問它的值:

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

您可以在此處[1]閱讀更多有關Promises工作原理的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM