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 }));
});
}
我有两种代码变体 - 想抛出 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 }));
});
}