Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS Promise resolve()不';t将值传递给.then(),但拒绝()将值传递给.catch()_Javascript_Reactjs_Amazon Cognito - Fatal编程技术网

Javascript ReactJS Promise resolve()不';t将值传递给.then(),但拒绝()将值传递给.catch()

Javascript ReactJS Promise resolve()不';t将值传递给.then(),但拒绝()将值传递给.catch(),javascript,reactjs,amazon-cognito,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 (

我正在尝试用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()
而不是
,那么()
值就可以完美地传递。如果我找不到原因,我可能会这样使用承诺。

  • 等待的承诺没有得到回报
  • 因此,即使解析了该值,也不会将其返回回调
  • 在此处添加返回

getSessionInfo
会忘记从函数返回任何内容,因此返回的值总是
undefined
。您也不必等待承诺,因为您以后不会在函数中使用承诺的结果

立即返回承诺并丢失
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
中的值

(async () => {
  try {
    const session = await getSessionInfo();
    console.log("session:", session)
    setIsAuth(true)
    if (isAuth) {
      history.push("/home")
    }
  } catch(error) {
    console.log("err:", err)
  }
})()

谢谢你的回答。我将重构我的代码并尝试在
newpromise(())
前面的yoursIt-seek-without
return
它永远不会传递
resolve(value)
中的值,没有大括号的箭头函数
{}
隐式返回承诺
()=>newpromise()
()=>{returnnewpromise();}
相同,谢谢!看来我不能掌握JS的很多特性。
(async () => {
  try {
    const session = await getSessionInfo();
    console.log("session:", session)
    setIsAuth(true)
    if (isAuth) {
      history.push("/home")
    }
  } catch(error) {
    console.log("err:", err)
  }
})()