Reactjs 关于React Native的异步请求

Reactjs 关于React Native的异步请求,reactjs,asynchronous,redux,Reactjs,Asynchronous,Redux,现在我正在使用React Native和Firebase构建一个项目。逻辑很简单:我希望在loginUser()失败后,错误消息将显示在屏幕上。但是,由于asy问题,首次登录失败时不会出现错误消息,因为登录用户尚未完成,而上次我成功登录时,仍然会出现错误消息,因为登录成功状态尚未更改 onButtonPress() { const { email, password } = this.props; this.props.loginUser({ email, passwor

现在我正在使用React Native和Firebase构建一个项目。逻辑很简单:我希望在loginUser()失败后,错误消息将显示在屏幕上。但是,由于asy问题,首次登录失败时不会出现错误消息,因为登录用户尚未完成,而上次我成功登录时,仍然会出现错误消息,因为登录成功状态尚未更改

onButtonPress() {
      const { email, password } = this.props;
      this.props.loginUser({ email, password });

      this.renderError();
  }
我向Firebase发送一个loginUser请求,如果成功登录,“error”状态将为空。但如果失败,“错误”将是一个字符串。相关动作和减速器如下所示

export const loginUser = ({ email, password }) => {
  return (dispatch) => {
    dispatch({ type: LOGIN_USER });

    firebase.auth().signInWithEmailAndPassword(email, password)
      .then(user => loginUserSuccess(dispatch, user))
      .catch(() => loginUserFail(dispatch));
  };
};
内减速器:

case LOGIN_USER_SUCCESS:
      return {
        ...state, user: action.payload, error: '', loading: false, password: ''
      };
    case LOGIN_USER_FAIL:
      return {
        ...state, error: 'Authentication Failed', password: '', loading: false
      };

我不知道如何处理这个简单的问题,如何确保renderError()函数只有在登录用户完成后才会出现?

您正在同步实现一段异步代码。首先,您应该
在操作中返回firebase.auth()
。然后您可以使用promises
this.props.logiuser({email,password})。然后(/*..*/)
Then()
将在Firebase响应请求后执行。最后,根据您的状态添加一个条件来包装您的
this.renderError()
,通常这应该在您的JSX中,而不是在您的函数逻辑中。

您可以添加
renderError
函数吗?我假设
loginUserSuccess()
loginUserFail()
都是调度操作的操作创建者,依次更改redux状态。您可能需要检查新道具,而不是在那里调用
this.renderError()
。如果你仍然没有得到答案,我会很乐意留下答案it@Dane您好,我以一种巧妙的方式处理了这个问题,它工作得很好,但我仍然想学习如何正确地解决这个问题。你能把答案留给我吗?非常感谢