javascript - ReactJS Promise resolve() 不会将值传递给 .then() ,而是reject() 将值传递给 .catch()

标签 javascript reactjs amazon-cognito

我正在尝试使用 ReactJS 和 AWS Cognito 制作一个项目。我正在使用 auth.js 文件夹中的所有身份验证功能。在登录屏幕中,我尝试从 auth.js 获取 session 信息,如下所示:

auth.js

var getSessionInfo = async () => {
        await new Promise((resolve, reject) => {
            const user = Pool.getCurrentUser();
            if (user) {
                user.getSession((err, session) => {
                    if(err){
                        reject(err)
                    }else{
                        resolve(session)
                    }
                })
            } else {
                reject()
            }
        })
    }

以及在login.js中

getSessionInfo()
      .then(session => {
        console.log("session:", session)
        setIsAuth(true)

        if (isAuth) {
          history.push("/home")
        }
      })
      .catch(err => {
        console.log("err:", err)
      })

在login.js中,.then(session => {...})此 session 始终是未定义的。无论我在其中写入什么,所有解析都不会返回值。

但有趣的是,如果我使用 reject() 而不是 resolve() 并使用 .catch() 而不是 >.then() 值完美传递。如果我找不到原因,我可能会这样使用 Promise。

最佳答案

  • 等待的 promise 不会被返回
  • 因此,即使该值已解析,它也不会返回到回调。
  • 在此处添加返回:
return await new Promise((resolve, reject) => {

关于javascript - ReactJS Promise resolve() 不会将值传递给 .then() ,而是reject() 将值传递给 .catch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63587665/

相关文章:

javascript - getTime函数不起作用,循环并识别打开的选项卡

javascript - React - 如何手动触发子组件的鼠标输入

javascript - 数组已排序,但 React 未按排序顺序渲染

android - 如何将 Amazon Cognito 与适用于 Android 的 Google Plus 集成?

javascript - 无需页面刷新即可制作 Ajax 和 PHP 更新页面?

javascript - 如何将事件传递给 LitElement 中的子级

javascript - 谷歌地图 API : How to get street addresses only as results of Autocomplete

node.js - react 样板 npm 安装错误

ruby-on-rails - 使用 Cognito 和 Devise 对应用程序进行身份验证

amazon-web-services - AWS Cognito 联合用户登录不允许在注销后以其他用户身份登录