问题:
在提供的代码中:
let AuthUser = data => { return google.login(data.username, data.password).then(token => { return token } ) }
执行以下命令时:
let userToken = AuthUser(data) console.log(userToken)
输出是:
Promise { <pending> }
解释:
JavaScript 中的 Promise 用于表示异步操作。如果异步函数返回仍未解决的 Promise,则在打印时它将记录为“pending”。
要捕获异步调用的结果,必须在 Promise 上使用 .then 方法。此方法采用回调函数作为参数,该函数将在 Promise 解决时执行。
解决方案:
要正确记录来自异步函数的令牌,修改代码如下:
let AuthUser = function(data) { return google.login(data.username, data.password).then(token => { return token } ) } let userToken = AuthUser(data) console.log(userToken) // Promise { <pending> } userToken.then(function(result) { console.log(result) // "Some User token" })
通过使用.then,你可以处理promise的结果,无论它是resolved还是resolved待处理。
详细信息:
Promise 只解析一次,解析后的值会传递给 .then 或 .catch 方法。 Promises/A 规范规定,如果 .then 处理程序中的函数返回一个值,则 Promise 将使用该值进行解析。如果处理程序返回另一个 Promise,则原始 Promise 将使用链式 Promise 的解析值进行解析。
以上是为什么我的异步函数返回 `Promise { }` 而不是预期值?的详细内容。更多信息请关注PHP中文网其他相关文章!