Я получил следующую ошибку, и я ищу решение.
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));
закончено?