Javascript ReactJS Promise resolve()不';t将值传递给.then(),但拒绝()将值传递给.catch()
我正在尝试用ReactJS和AWS Cognito做一个项目。我正在使用auth.js文件夹中的所有auth函数。在登录屏幕中,我试图从auth.js获取会话信息,如下所示: auth.jsJavascript 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 (
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-withoutreturn
它永远不会传递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)
}
})()