redux-form:如何在 Promise 中抛出新的 SubmissionError?

redux-form: How to throw new SubmissionError in Promise?

我有两种代码变体 - 想抛出 SubmissionError(redux 形式),第一个代码工作正常,第二个我得到 "Uncaught (in promise)"。试图修复第二个代码。谁能说出为什么第二个代码不能抛出 SubmissionError?尝试用拒绝来做,但它也不起作用。 new Promise 是否可以抛出 SubmissionError?

handleSubmit = async (values) => {
  const { addItem, reset } = this.props;
  await addItem({ item: values }).catch ((e) => {
    throw new SubmissionError({ _error: e.message });
  });
}

第二个无效:

handleSubmit = (values) => {
    const { addItem, reset } = this.props;
    const promise = (item) => new Promise((resolve) => {
      addItem(item);
      resolve();
    });

    return promise(values).catch((e) => {
      throw new SubmissionError({ _error: e.message });
    });
  }

"addItem" 函数(如果需要):

export const addItem = ({ text }) => async (dispatch) => {
  try {
    const url = routes.Url();
    const response = await axios.post(url, { item: { text } });
    dispatch(addItemSuccess({ item: response.data }));
   } catch (e) {
     throw e;
   }
};

嗯,我认为问题在于你没有等待你的承诺。您 return 承诺而不是承诺结果,因此您的代码不同步并且 SubmissionError 丢失上下文

试一试:

handleSubmit = (values) => {
    const { addItem, reset } = this.props;
    const promise = (item) => new Promise((resolve) => {
      addItem(item);
      resolve();
    });

    return await promise(values).catch((e) => {
      throw new SubmissionError({ _error: e.message });
    });
  }

存在通过 stopSubmit

将异步错误设置为表单的替代方法
handleSubmit = (values) => {
    const { addItem, reset } = this.props;
    const promise = (item) => new Promise((resolve) => {
      addItem(item);
      resolve();
    });

    return promise(values).catch((e) => {
      dispatch(stopSubmit('FORM_NAME', { _error: e.message }));
    });
  }