我正在尝试使用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。
答案 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