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

时间:2020-08-25 21:56:41

标签: javascript reactjs amazon-cognito

我正在尝试使用ReactJS和AWS Cognito创建一个项目。我正在auth.js文件夹中使用所有auth函数。在登录屏幕中,我试图像这样从auth.js获取会话信息:

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 => {...})该会话始终是未定义的。无论我在其中写入什么内容,任何解决方法都不会返回值。

但是有趣的部分是,如果我使用reject()而不是resolve()并使用.catch()而不是.then(),则值可以完美传递。如果找不到原因,我可以通过这种方式使用Promises。

2 个答案:

答案 0 :(得分:1)

  • 等待中的承诺未退回
  • 因此,即使已解析该值,也不会将其返回给回调。
  • 在此处添加返回
fun updateMargin(topMargin: Int){
    if (....) {
      val params: ViewGroup.MarginLayoutParams = this.layoutParams as ViewGroup.MarginLayoutParams
      params.topMargin = topMargin; //This value is in px
      layoutParams = params
      requestLayout()
    }
}

答案 1 :(得分:1)

getSessionInfo忘记从函数返回任何内容,因此返回的值始终为undefined。您也不必{@ {1}},因为稍后您不会在函数中使用承诺的结果。

立即兑现承诺并丢失await(这在您调用async / await函数时很有意义)以解决您的问题。

getSessionInfo

在这里const getSessionInfo = () => new Promise((resolve, reject) => { const user = Pool.getCurrentUser(); if (user) { user.getSession((err, session) => { if (err) { reject(err) } resolve(session); }); } reject(); }); 很有用,因为您想在继续之前实际上等待async / await中的值。

getSessionInfo