我的代码:
let AuthUser = data => {
return google.login(data.username, data.password).then(token => { return token } )
}
当我尝试运行这样的东西时:
let userToken = AuthUser(data)
console.log(userToken)
我越来越:
Promise { <pending> }
但为什么?
我的主要目标是从返回承诺的 google.login(data.username, data.password)
获取令牌到变量中。然后才执行一些操作。
原文由 Src 发布,翻译遵循 CC BY-SA 4.0 许可协议
只要其结果尚未解决,promise 将始终记录未决。无论承诺状态如何(已解决或仍待处理),您都必须在承诺上调用
.then
来捕获结果:这是为什么?
承诺只是向前的方向;您只能解决它们一次。
Promise
的解析值被传递给它的.then
或.catch
方法。细节
根据 Promises/A+ 规范:
这个规范有点难解析,所以让我们分解一下。规则是:
如果
.then
处理程序中的函数返回一个值,则Promise
将使用该值解析。如果处理程序返回另一个Promise
,则原始Promise
将使用链接的Promise
的解析值解析。下一个.then
处理程序将始终包含在前一个.then
中返回的链式承诺的解析值。下面更详细地描述了它的实际工作方式:
1.
.then
函数的返回值将是 promise 的解析值。2. 如果
.then
函数返回一个Promise
,那么该链式 Promise 的解析值将传递给下面的.then
。