如何解决无限的Javascript承诺?

时间:2017-07-23 16:56:00

标签: javascript promise apollo react-apollo

我正在使用Apollo GraphQL库,并且它一度返回一个promise。当我在控制台中检查它时,我可以看到这是一个已经解决的承诺:

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

然而,当我Promise.resolve(thatPromise)我回来了......同样的承诺。无论我多少次履行承诺,它都会不断回复承诺,从而无法获得承诺的价值。

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

有没有人遇到类似这样的事情,如果是这样的话,你是否能够弄清楚如何提取这种无限解决的承诺的价值?

P.S。我试过了:

thatPromise['[[PromiseValue]]'];

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

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

修改

我认为这里很奇怪,我没有报告所有相关细节。我会在我更好地解决问题后发布更多信息(不想让任何人通过疯狂追逐)。

1 个答案:

答案 0 :(得分:1)

你没有理由要求app.UseCookieAuthentication(new CookieAuthenticationOptions() { AutomaticAuthenticate = true, AutomaticChallenge = true, LoginPath = new PathString("/login"), LogoutPath = new PathString("/logout") }); app.Map("/login", builder => { builder.Run(async context => { await context.Authentication.ChallengeAsync("Patreon", properties: new AuthenticationProperties() { RedirectUri = "/" }); }); }); app.Map("/logout", builder => { builder.Run(async context => { await context.Authentication.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); context.Response.Redirect("/"); }); }); 来获取价值。请记住,Promises是异步的。你必须像这样访问它的价值:

Promise.resolve

你可以阅读更多[这里] [1],了解Promise如何运作。