抛出redux-form的SubmissionError会导致Uncaught(在promise中)

时间:2017-12-15 13:13:10

标签: javascript reactjs redux redux-form

我提前为格式化做了道歉(对此仍然是个新手),也许是对于这个愚蠢的问题(在整个React生态系统中仍然是一个新的)。

我最近选择了redux-form,从那以后我一直试图以下列方式使用它:

export const searchPermissions = () => {
  return dispatch => {
    Axios.get(`${URL}/findPermissions`)
      .then(resp => {
        console.log(resp.data);
        dispatch({ type: PERMISSIONS_SEARCHED, payload: resp.data });
      })
      .catch(error => {
        console.log(error);
        throw new SubmissionError({
          _error: "Submission error!"
        });
      });
  };
};

我一直收到未捕获的错误。

通过redux-form的github搜索,我看到几个类似的问题最终通过添加return语句(我认为我做得正确)来解决,现在我有点迷失了。

提前感谢您的帮助。

编辑: 我正在尝试获取权限,以便在用户进入页面后立即在3个组合框中显示它们。在用于获取数据的组件中,我有以下代码:

  componentWillMount() {
    this.props.searchPermissions();
  }
  render() {
    return (
      <div>
        <LayoutGroupForm
          onSubmit={this.props.addLayoutGroup}
          loadPermissions={this.props.loadPermissions}
          visualizationPermissions={this.props.visualizationPermissions}
          detailPermissions={this.props.detailPermissions}
          resetForm={this.props.resetForm}
        />
      </div>
    );
  }
}
const mapStateToProps = state => ({
  loadPermissions: state.layoutGroup.loadPermissions,
  visualizationPermissions: state.layoutGroup.visualizationPermissions,
  detailPermissions: state.layoutGroup.detailPermissions
});
const mapDispatchToProps = dispatch =>
  bindActionCreators(
    {
      searchPermissions,
      addLayoutGroup,
      resetForm
    },
    dispatch
  );

在我的减速机上,我有以下内容:

    case PERMISSIONS_SEARCHED:
      return {
        ...state,
        loadPermissions: action.payload.loadPermissions,
        visualizationPermissions: action.payload.visualizationPermissions,
        detailPermissions: action.payload.detailPermissions
      };

2 个答案:

答案 0 :(得分:1)

Redux Form期望错误成为被拒绝的承诺中的错误。试试这个:

export const searchPermissions = () => {
  return dispatch => {
    return Axios.get(`${URL}/findPermissions`)
//  ^^^^^^-------------------------------------- Actually return the promise!
      .then(resp => {
        console.log(resp.data);
        dispatch({ type: PERMISSIONS_SEARCHED, payload: resp.data });
      })
      .catch(error => {
        console.log(error);
        return Promise.reject(new SubmissionError({
//      ^^^^^^^^^^^^^^^^^^^^^^------------------------ Return rejected promise
          _error: "Submission error!"
        }));
      });
  };
};

答案 1 :(得分:1)

对于仍然遇到此问题的人(如我),解决方案是将return添加到您的提交处理程序中。 在这里阅读更多 https://github.com/erikras/redux-form/issues/2269