Обработка ошибки в обещании путем проверки ответа - PullRequest
2 голосов
/ 03 октября 2019

Мне нужно обработать ошибку, в которой ответ не соответствует 'then' в приведенном ниже примере кода.

getData().then(response => transformData(response));

Мне, вероятно, нужно сделать что-то подобное. Но я не совсем понимаю, как получить «ответ», присутствующий внутри «then».

getData().then(response => transformData(response)).catch(() => if(!response.data) { dispatch({ type: 'some_action' });
}

Как мне получить доступ к ответу снаружи «then» и внутри catch, чтобы отправить другое действие?

Ответы [ 3 ]

2 голосов
/ 03 октября 2019

Я думаю, что вы можете обработать, если ответ успешен, но у него нет данных о i, или если запрос только что получил ошибку, оператор catch может обработать его:

getData()
  .then(response =>{
    if(!response.data) { 
     dispatch({ type: 'some_action_for_the_error', payload: response.error });
    } 
    else {
     transformData(response)
    }
  ).catch(( error ) =>{
    console.error(error);
    dispatch({ type: 'some_action_for_the_error', payload: error });
  }
0 голосов
/ 03 октября 2019

Сначала вы должны понять, как работает Promise. Метод then () имеет две функции. Первый - успех , а второй - сбой . Ошибка может быть записана с помощью. catch в es6. Теперь сначала поймите, что catch вызывается только при сбое сети, ошибка 500, ошибка 404 не найдена. В этом случае нет данных для обработки.

Но то, что вам нужно, это 200 Ok, но если данные отсутствуют. Вы успешно внедрили код:

getData().then(response => {
  const res = transformData(response);
  if(!res.data) {
     // do your stuff
  }
   return res; // else normal behaviour
});
0 голосов
/ 03 октября 2019

Функция .then () может принимать два аргумента. Первый - это обратный вызов, который вы используете. Второй - это обратный вызов, который вы хотите.

getData().then(
  success => transformData(success),
  failure => doSomething(failure)
);
...