我正在尝试用ReactJS和AWS做一个项目。我正在使用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()
,则值传递得非常完美。如果我找不到原因,我可能会用这样的承诺。
发布于 2020-08-25 22:07:17
尽管值已被解析,但它不会被返回到回调中。
return await new Promise((resolve, reject) => {
发布于 2020-08-25 22:19:34
getSessionInfo
忘记从函数返回任何内容,因此返回的值总是undefined
。您也不必在函数中使用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
的值。
(async () => {
try {
const session = await getSessionInfo();
console.log("session:", session)
setIsAuth(true)
if (isAuth) {
history.push("/home")
}
} catch(error) {
console.log("err:", err)
}
})()
https://stackoverflow.com/questions/63587665
复制相似问题