程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么我的异步函数返回Promise { }而不是值?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为什么我的异步函数返回Promise { }而不是值??

开发过程中遇到为什么我的异步函数返回Promise { }而不是值?的问题如何解决?下面主要结合日常开发的经验,给出你关于为什么我的异步函数返回Promise { }而不是值?的解决方法建议,希望对你解决为什么我的异步函数返回Promise { }而不是值?有所启发或帮助;

只要其结果尚未解决,promise将始终记录未决。.then无论promise状态如何(已解决或仍处于待处理状态),您都必须调用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"
})

这是为什么?

承诺只是向前的方向;您只能解决一次。a的解析值Promise传递给其.then.catch方法。

细节

根据Promises / A +规范:

这个规范很难解析,所以让我们分解一下。规则是:

如果.then处理程序中的函数返回一个值,则Promise使用该值进行解析。如果处理程序返回另一个Promise,则原始处理程序将Promise使用链式的已解析值进行解析Promise。下一个.then处理程序将始终包含前一个中返回的链接诺言的已解析值.then

下面更详细地描述了它的实际工作方式:

function initPromise() {
  return new Promise(function(res, rej) {
    res("initResolve");
  })
}

initPromise()
  .then(function(result) {
    console.log(result); // "initResolve"
    return "normalReturn";
  })
  .then(function(result) {
    console.log(result); // "normalReturn"
  });

function initPromise() {
  return new Promise(function(res, rej) {
    res("initResolve");
  })
}

initPromise()
  .then(function(result) {
    console.log(result); // "initResolve"
    return new Promise(function(resolve, reject) {
       setTimeout(function() {
          resolve("secondPromise");
       }, 1000)
    })
  })
  .then(function(result) {
    console.log(result); // "secondPromise"
  });

解决方法

我的代码:

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)中返回承诺)转换为变量。然后才执行一些操作。

大佬总结

以上是大佬教程为你收集整理的为什么我的异步函数返回Promise { }而不是值?全部内容,希望文章能够帮你解决为什么我的异步函数返回Promise { }而不是值?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。