如何在redux操作分派调用中返回Promise,以便可以链接.then块?

时间:2019-02-08 23:23:29

标签: reactjs react-native promise

我正在使用react-native和redux创建一个应用程序。我的应用程序应向Firebase Rest API发送请求,以取回用户的待办事项。在我的react-native应用程序中,我通过redux函数获得此响应,该函数在react-native组件的connect部分中传递。我想在调用函数后立即链接.then块。

我尝试创建一个诺言并将其返回给我,但是在链接.then / .catch时,它会自动解决错误。 我也曾尝试做同样的事情而没有做出承诺。

这是我的动作:

export const fetchHomework = () => {
  return (dispatch, getState) => {
      dispatch(uiStartLoading());
      dispatch(uiStartFetchingHomework());
      dispatch(authGetToken())
      .catch(err => {
        dispatch(errHandler(err))
      })
      .then(token => {
        const uid = getState().userid;

        fetch(restAPI)
        .catch(err => {
          dispatch(errHandler(err));
        })
        .then(res => res.json())
        .then(response => {
          dispatch({
            type : 'SET_HOMEWORK_FOR_AGENDA',
            homework : response
          })
          dispatch(uiStopLoading());
          dispatch(uiStopFetchingHomework());
        })
        .catch(err => {
          dispatch(errHandler(err));
          dispatch(uiStopLoading());
          dispatch(uiStopFetchingHomework());
        })

      })
      dispatch(uiStopLoading());
      dispatch(uiStopFetchingHomework());
  }
}

注意:rest api替换为rest api的url 这是我获取此数据的位置:

this.setState({refreshing: true});
this.props.retrieveHomework();
this.setState({refreshing: false, firebaseItems : this.props.homework});
this.loadItems(this.state.selectedDay);

(刷新时在函数中调用)

我希望当我在retrieveHomework之后链接一个.then块时,then块将等待函数完成然后在其中运行代码,但这不是正在发生的事情。发生的情况是它跳过了then块,或者抛出了catch块捕获的错误。

编辑: 由于我使用的是redux thunk,因此this.props.retrieveHomework是一个指向异步操作的函数。

1 个答案:

答案 0 :(得分:0)

您需要将所有要等待的代码移入.then

this.props.retrieveHomework()
  .then(() => {
    this.setState({refreshing: false, firebaseItems : this.props.homework});
    this.loadItems(this.state.selectedDay); // If this is async, you need to `return` it here as well
  });