问题描述
在尝试继续我的帐户登录代码(客户端)之前,我试图从数据库中检索一个值。但是我感觉该应用程序正在启动API请求,但仍在继续执行代码,因此我的后期检查为空。在继续客户端代码之前,我想等待请求完成并获得我的价值。怎么做 ? 我尝试了几种方法,但无济于事,我必须在连接按钮上单击两次以获取正确的值。
我的客户端:
const Login = props => {
const errormsg = useSelector(state => state.auth.errorMessage);
const statusrequest = useSelector(state => state.auth.status);
const connexionStatus = useSelector(state => state.auth.token);
useEffect(() => {
},[statusrequest]);
const signinHandler = async () => {
if (email != '') {
if (password != '') {
console.log("1")<------------------------
dispatch(AuthActions.signIn(email.toLowerCase(),password))
console.log("2")<------------------------
console.log("Status Login.js: "+statusrequest)<------------------------
console.log("3") <------------------------
if (statusrequest != "") {
if (statusrequest == "200"){
if (connexionStatus !== null) {
if(accessLevel == "1") {
props.navigation.navigate('barManagerMainFlow');
} else if(accessLevel == "2") {
props.navigation.navigate('baradminMainFlow');
}else {
console.log("OK")
props.navigation.navigate('mainFlow');
}
}
} else {
Alert.alert("Baraka",errormsg)
return;
}
}
console.log("Empty Status") <------------------------
} else {
Alert.alert("Baraka","Password cannot be empty");
}
} else {
Alert.alert("Baraka","Emailcannot be empty");
}
};
我的AuthActions.js:
export const signIn = (email,password) => {
return async dispatch => {
try {
await AsyncStorage.clear()
console.log("4")<------------------------
const response = await Api.post('/signin',{ email,password });
console.log("5")<------------------------
console.log("status AuthActions.js :"+response.status)<------------------------
await AsyncStorage.setItem('token',response.data.token);
await dispatch({ type: TOGGLE_SIGNIN,payload: response.data.token,payloadstatus : response.status
});
} catch (error) {
dispatch({ type: TOGGLE_ERROR,payload: "Wrong Password",payloadstatus: "422"});
}
};
};
我的AuthReducer.js:
const authReducer = (state = initialState,action) => {
switch (action.type) {
case TOGGLE_SIGNIN:
console.log("7")<------------------------
console.log("status Reducer.js : "+action.payloadstatus)<------------------------
return { ...state,token: action.payload,status: action.payloadstatus
}
}
当我第一次单击连接按钮时,我已经做到了(遵循
1
2
Status Login.js:
3
Empty status
4
5
status AuthActions.js :200
6
7
status Reducer.js : 200
8
当我单击两次时:
1
2
Status Login.js: 200
3
statut = 200
OK
4
5
status AuthActions.js :200
6
7
status Reducer.js : 200
8
基本上,我采用第一次点击中设置的变量“ statusrequest”。
我不知道我是否清楚,但是如何等待请求结束: dispatch(AuthActions.signIn(email.toLowerCase(),密码))
我尝试了几种方法(等待,尝试/捕获),但是操作相同...
谢谢您的帮助...
(对不起,我的英语,这不是我的母语。)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)