Я использую Firebase .signInWithEmailAndPassword(email, password).then()
для аутентификации в реактивном проекте Android.
У меня есть функция, вызываемая для события кнопки onPress. Аутентификация имеет место, но по какой-то причине .then()
не срабатывает, пока я не коснусь другого места на экране. Он с радостью подождет 5 минут, пока я не нажму куда-нибудь, кроме кнопки, чтобы выстрелить.
Я вижу, что аутентификация происходит. Это просто обещание .then()
, которое зависает до тех пор, пока фокус не сместится с кнопки.
Я использую нативные библиотеки 0.59.5 и firebase 5.1.0. Я пробовал console.logging каждого шага, и ясно, что then()
- это то, где он не работает Странно catch()
работает сразу.
export const loginUser = ({ email, password }) => {
return dispatch => {
dispatch({ type: LOGIN_USER })
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(user => loginUserSuccess(dispatch, user))
.catch(() => {
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(user => loginUserSuccess(dispatch, user))
.catch(loginUserFail(dispatch))
})
}
}
const loginUserFail = dispatch => {
dispatch({ type: LOGIN_USER_FAIL })
}
const loginUserSuccess = (dispatch, user) => {
console.log('Firing success')
dispatch({
type: LOGIN_USER_SUCCESS,
payload: user
})
}
В приведенном выше примере loginUserFail будет запущен немедленно, если аутентификация не удалась, но loginUserSuccess будет ждать бесконечно, пока я не нажму где-нибудь еще в приложении.