我正在使用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()
得到它,所以虽然它看起来像一个承诺,但它只是一个承诺的克隆,在这种情况下,这可以解释为什么我无法解决它。但是,它没有解释我如何提取价值。
修改
我认为这里很奇怪,我没有报告所有相关细节。我会在我更好地解决问题后发布更多信息(不想让任何人通过疯狂追逐)。
答案 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如何运作。