异步调用不评估反应中的条件
aysnchronous calls not evaluating condition in react
我有一个基于状态呈现不同组件的验证器文件。问题是以下代码不起作用。我需要让代码等到组件检查条件 if 条件。
所以基本上它应该等待这个条件来评估
isSignedIn() === true
并根据这个条件做出相应的决定。
感谢任何帮助。
import Auth from '@aws-amplify/auth'
export default class Authenticator extends Component {
isSignedIn = async () => {
let isUserAuthenticated
try {
const userSession = await Auth.currentSession()
if(userSession.idToken != null) {
isUserAuthenticated = true
}
}
catch (error) {
isUserAuthenticated = false
}
return isUserAuthenticated
}
render() {
if(isSignedIn() === true) {
return null
}
else {
return <SignIn/>
}
}
}
问题是它开始呈现登录页面,尽管我使用了异步功能。
一个 async
函数总是 return 一个承诺,所以你不能以同步的方式使用它 return 的东西。
您可以改为检查用户是否在 componentDidMount
中进行了身份验证,并将结果放入组件的状态并将其用于呈现。
例子
import Auth from "@aws-amplify/auth";
export default class Authenticator extends Component {
state = {
signedIn: null
};
componentDidMount() {
this.checkUserStatus();
}
checkUserStatus = async () => {
try {
const userSession = await Auth.currentSession();
if (userSession.idToken != null) {
this.setState({ signedIn: true });
}
} catch (error) {
this.setState({ signedIn: false });
}
};
render() {
const { signedIn } = this.state;
if (signedIn === null || signedIn) {
return null;
} else {
return <SignIn />;
}
}
}
我有一个基于状态呈现不同组件的验证器文件。问题是以下代码不起作用。我需要让代码等到组件检查条件 if 条件。 所以基本上它应该等待这个条件来评估
isSignedIn() === true
并根据这个条件做出相应的决定。 感谢任何帮助。
import Auth from '@aws-amplify/auth'
export default class Authenticator extends Component {
isSignedIn = async () => {
let isUserAuthenticated
try {
const userSession = await Auth.currentSession()
if(userSession.idToken != null) {
isUserAuthenticated = true
}
}
catch (error) {
isUserAuthenticated = false
}
return isUserAuthenticated
}
render() {
if(isSignedIn() === true) {
return null
}
else {
return <SignIn/>
}
}
}
问题是它开始呈现登录页面,尽管我使用了异步功能。
一个 async
函数总是 return 一个承诺,所以你不能以同步的方式使用它 return 的东西。
您可以改为检查用户是否在 componentDidMount
中进行了身份验证,并将结果放入组件的状态并将其用于呈现。
例子
import Auth from "@aws-amplify/auth";
export default class Authenticator extends Component {
state = {
signedIn: null
};
componentDidMount() {
this.checkUserStatus();
}
checkUserStatus = async () => {
try {
const userSession = await Auth.currentSession();
if (userSession.idToken != null) {
this.setState({ signedIn: true });
}
} catch (error) {
this.setState({ signedIn: false });
}
};
render() {
const { signedIn } = this.state;
if (signedIn === null || signedIn) {
return null;
} else {
return <SignIn />;
}
}
}