[英]ReactJS -Throw Submission Error with axios response
我在理解问题以使我的代码正常工作。 基本上,我想验证来自服务器的数据,该数据在验证时不会引发错误,但是会在需要处理响应的地方给出正确的响应,并抛出Submission Error以显示带有redux-form的验证错误。
以下是我的代码。
onFormSubmit = (values) =>{
this.setState({loading:true});
this.props.validateEmailFromServer(this.props.session,values,(response)=>{
if(response.success === 2){
throw new SubmissionError({email:'Email already Taken', _error:'Failed'});
}
});
}
动作定义如下
export function validateEmailFromServer(session,values,callback){
var url='API_URL';
var response = axios.get(url, null,
getHeaders(session));
return (dispatch) => {
response.then(({data}) => {
if(data.resource.length>0){
callback({success: 2,message:'Email id is not available!'});
}else{
callback({success: 1,message:'Email is available!'});
}
}).catch((error) => {
callback({success: 0, message: error});
});
}
}
我面临的问题是,当在onFormSubmit函数上调用回调时引发 Submission Error时,它会自动调用axios的错误块,但我无法摆脱。
我需要帮助来解决这个问题。
谢谢。
感谢大家的指点,我设法获得了解决方案,我更改了操作并按如下所示直接在onFormSubmit函数中调用axios,它可以工作。
onFormSubmit = (values) =>{
var getUrl = 'APIURL';
return axios.get(getUrl,getHeaders(this.props.session))
.then(function({data}) {
if(data.resource.length>0)
throw new Error("ValidationError");
else{
console.log("Proceed");
}
}).catch((err) =>{
if(err.message === 'ValidationError')
throw new SubmissionError({email:'Email already Taken', _error:'Failed'});
});
}
希望这对试图找到类似解决方案的人们有所帮助。
感谢您的帮助。
将callback
调用包装在常规try...catch
,否则未处理的SubmissionError
自然会导致拒绝整个response
Promise。
export function validateEmailFromServer(session,values,callback){
var url='API_URL';
var response = axios.get(url, null,
getHeaders(session));
return (dispatch) => {
response.then(({data}) => {
try {
if(data.resource.length>0){
callback({success: 2,message:'Email id is not available!'});
}else{
callback({success: 1,message:'Email is available!'});
}
} catch(ex) {
// do something
}
}).catch((error) => {
callback({success: 0, message: error});
});
}
}
使用promise时,如果您有一个.catch
块,则除非您重新抛出该错误,否则它不会触发链中的其他.catch
块。
我怀疑这里可能是这种情况。
可以使用诸如notifyEmailTaken()之类的方法来处理电子邮件,而不是在已接收电子邮件时查找错误。 您正在抛出错误,所以它被您的catch语句捕获了(这是我的猜测)。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.