我正在将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 })}在上面的示例中,如果auth失败,loginUserFail将立即运行,但是loginUserSuccess将无限期等待,直到我点击应用程序中的其他位置。
3 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
尝试删除“然后”的承诺:
firebase.auth().signInWithEmailAndPassword(email, password)
.catch(error => {
dispatch(loginUserFail(error));
});
之后,尝试使用此命令创建一个动作:
firebase.auth().onAuthStateChanged(user => {
if (user) {
console.log('success sign in');
dispatch(loginUserSuccess(user));
} else {
// No user is signed in.
}
});
添加回答
举报
0/150
提交
取消