首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ReactJS允诺解析()不会将值传递给.then(),而是将该值传递给.catch()

ReactJS允诺解析()不会将值传递给.then(),而是将该值传递给.catch()
EN

Stack Overflow用户
提问于 2020-08-25 21:56:41
回答 2查看 197关注 0票数 2

我正在尝试用ReactJS和AWS做一个项目。我正在使用auth.js文件夹中的所有auth函数。在登录屏幕中,我试图从auth.js获得如下会话信息:

auth.js

代码语言:javascript
运行
复制
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中

代码语言:javascript
运行
复制
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(),则值传递得非常完美。如果我找不到原因,我可能会用这样的承诺。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-25 22:07:17

尽管值已被解析,但它不会被返回到回调中。

代码语言:javascript
运行
复制
return await new Promise((resolve, reject) => {
票数 1
EN

Stack Overflow用户

发布于 2020-08-25 22:19:34

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

立即返回承诺,并失去async / await (当您调用getSessionInfo函数时这将是有意义的)来解决您的问题。

代码语言:javascript
运行
复制
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的值。

代码语言:javascript
运行
复制
(async () => {
  try {
    const session = await getSessionInfo();
    console.log("session:", session)
    setIsAuth(true)
    if (isAuth) {
      history.push("/home")
    }
  } catch(error) {
    console.log("err:", err)
  }
})()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63587665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档