Данные теряются где-то в проводке действий

У меня есть простая форма регистрации с полями для электронной почты, пароля и кода администратора. Я передаю эти данные своему создателю действий, и они проходят через три действия перед завершением регистрации. Где-то там, это просто останавливается. Не возвращает ошибок. Вот мой код

export const checkAdminCode = ({ email, password, adminCode }, history) => {
  return (dispatch) => {
    dispatch({ type: CHECK_ADMIN_CODE });

    firebase.database().ref('/env/adminCode').once('value', (snapshot) => {
      if (snapshot.val() === adminCode) {
        return registerUser(email, password, history, dispatch);
      }

      return loginUserFail(dispatch);
    });
  };
};

const registerUser = (email, password, history, dispatch) => {
  return (dispatch) => {
    dispatch({ type: REGISTER_USER });

    firebase.auth().createUserWithEmailAndPassword(email, password)
      .then((user) => loginUserSuccess(dispatch, history, user))
      .catch((err) => loginUserFail(dispatch, err));      
  };
};

const loginUserSuccess = (dispatch, history, user) => {
  history.push('/admin/dashboard');
  dispatch({
    type: LOGIN_USER_SUCCESS,
    paylaod: user
  });
};

Несколько вещей, на которые стоит обратить внимание:

  • if (snapshot.val() === adminCode) { работает.
  • Прежде чем я добавил код администратора, я должен был отправить форму прямо на registerUserи это сработало.
  • Я разместил несколько console.logs, чтобы попытаться точно определить, где происходит сбой. После тестирования следующий код:

    const registerUser = (email, password, history, dispatch) => {
      console.log('test1');
      return (dispatch) => {
        console.log('test2');
        dispatch({ type: REGISTER_USER });
    
        firebase.auth().createUserWithEmailAndPassword(email, password)
          .then((user) => loginUserSuccess(dispatch, history, user))
          .catch((err) => loginUserFail(dispatch, err));      
      };
    };
    

console.log('test1'); работал, console.log('test2'); не работал

Еще раз, он не возвращает ошибку, поэтому я не знаю, как еще описать, что происходит или что искать.

Пожалуйста помоги. Заранее спасибо.

1 ответ

Решение

registerUser является async redux action нужно позвонить с dispatch,

Вам не нужно проходить dispatch Explicitaly для вызова функции.

Это будет пропущено косвенно по редуксу.

export const checkAdminCode = ({ email, password, adminCode }, history) => {
      return (dispatch) => {
        dispatch({ type: CHECK_ADMIN_CODE });

        firebase.database().ref('/env/adminCode').once('value', (snapshot) => {
          if (snapshot.val() === adminCode) {

            dispatch (registerUser(email, password, history));
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

          }

          return loginUserFail(dispatch);
        });
      };
    };
Другие вопросы по тегам