等待调度完成Axios,Redux,Thunk,ReactNative

问题描述

在尝试继续我的帐户登录代码(客户端)之前,我试图从数据库中检索一个值。但是我感觉该应用程序正在启动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 (将#修改为@)