ReactJS - ошибка при отправке с ответом axios - PullRequest
0 голосов
/ 05 марта 2019

У меня проблема с пониманием, чтобы мой код работал правильно. По сути, я хочу проверить данные с сервера, который при проверке не выдает ошибку, а дает правильный ответ, где мне нужно обработать ответ, и выдает ошибку отправки, чтобы показать ошибку проверки с избыточной формой.

Вот мой код ..

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 , она автоматически вызывает блок ошибок axios, я не могу убирайся из этого ..

Мне нужна помощь, чтобы решить эту проблему.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 05 марта 2019

Спасибо всем за ваши указатели, мне удалось найти решение, я изменил действие и напрямую вызывая axios в функции onFormSubmit следующим образом, это работает ..

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'});
            });
}

Надеюсь, что это помогает людям, которыепытаюсь найти подобное решение.

Спасибо за помощь .. Приветствия.

1 голос
/ 05 марта 2019

При использовании обещаний, и у вас есть блок .catch, он не будет вызывать дополнительные блоки .catch в цепочке, если вы не перезапустите ошибку.

Я подозреваю, что это может быть здесь.

1 голос
/ 05 марта 2019

Вместо того, чтобы выдавать ошибку, когда электронное письмо уже получено, обработайте его чем-то вроде notifyEmailTaken (). Вы выдаваете ошибку и, следовательно, она ловится вашим оператором catch (это мое предположение).

Удачи!

1 голос
/ 05 марта 2019

Оберните ваш callback вызов в обычный try...catch, в противном случае необработанный SubmissionError естественным образом приведет к отклонению всего response Обещания.

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});
    });
  }
}
...