Получил "Возможный необработанный отказ от обещания" в моем редуксе с firebase - PullRequest
0 голосов
/ 11 ноября 2019

Я получил следующую ошибку, и я ищу решение.

Possible Unhandled Promise Rejection (id: 0)
TypeError: undefined is not an object (evaluating 'e.type')

Я нашел много вопросов по этой проблеме, почти решения вставляют throw error в оператор catch. Я попробовал, но ошибка не исчезла.

Что не так с моим кодом?

Технологии

  • реактивный-родной
  • избыточный
  • реактивная навигация

Это мой код.

  • Действие
:

export function requestSignIn(email, password) {
  return function (dispatch) {
    // change loading status
    dispatch(startedRequest());

    if (email && password) {
      firebase.auth().signInWithEmailAndPassword(email, password)
        .then(response => {
          if (response) {
            // save email and password in local secure storage.
            SecureStorage.setItem('email', email);
            SecureStorage.setItem('password', password);

            // save uid into store
            dispatch(requestSignInSuccess(response.user.uid));

            dispatch(NavigationService.navigate('Home', { uid: response.user.uid }));
          } else {
            dispatch(requestSignInFailure('network error'));
          }
        })
        .catch(error => {
          // I tried inserting 'throw error' here.
          // throw error;
          switch (error.code) {
            case 'auth/user-not-found':
              dispatch(requestSignInFailure('user not found'));
              break;
            case 'auth/invalid-email':
              dispatch(requestSignInFailure('invalid email'));
              break;
            default:
              dispatch(requestSignInFailure('something went wrong'));
          }
        })

    } else {
      dispatch(requestSignInFailure('error message from else statement'))
    }
  }
}

export function requestSignInSuccess(uid) {
  return {
    type: REQUEST_SIGN_IN_SUCCESS,
    payload: {
      uid: uid
    }
  }
}

export function requestSignInFailure(errorMessage) {
  return {
    type: REQUEST_SIGN_IN_FAILURE,
    payload: {
      errorMessage: errorMessage
    }
  }
}
  • Компонент вызывает вышеуказанное действие
:

class SignIn extends Component {

  async handleSignIn() {
    const { requestSignIn } = this.props;
    const { email, password } = this.props.auth;
    Keyboard.dismiss();

    requestSignIn(email, password);
  }
:

Добавление

Я удалилоператор dispatch(NavigationService.navigate('Home', { uid: response.user.uid }));, ошибка не появится.

Причиной проблемы является изменение экрана во время работы функции?

Если это правда, как мне выполнить dispatch(NavigationService.navigate('Home', { uid: response.user.uid })); после dispatch(requestSignInSuccess(response.user.uid)); закончено?

...