ESLint показывает мне ошибку и предлагает использовать try ... catch - PullRequest
1 голос
/ 30 апреля 2020

В настоящее время я проходил курс обучения: Front-End Web Development с React в Coursera, и я застрял в точке, где инструктор показывал, как получать данные с использованием перекрестной выборки. Здесь он показывал

export const fetchDishes = () => (dispatch) => {
  return fetch(baseUrl + 'dishes')
    .then(
      (response) => {
        if (response.ok) {
          return response;
        } else {
          var error = new Error(
            'Error ' + response.status + ': ' + response.statusText
          );
          error.response = response;
          throw error;
        }
      },
      //manually handle error if the server didn't response
      (error) => {
        var errmess = new Error(error.message);
        throw errmess;
      }
    )
    .then((response) => response.json())
    .then((dishes) => dispatch(addDishes(dishes)));
    .catch(error => dispatch(dishesFailed(error.message)));
};

Но мой ESLint показывает мне ошибку и предлагает использовать блок try ... catch.

image

Но мне было интересно, почему эта ошибка возникает, даже если инструктор напишет ее, как указано выше, и прекрасно выполнит приложение? Я понятия не имею, как преобразовать этот код в блок try ... catch.


@ erik_m дает решение, но я понял, что точка с запятой означает разрыв цепочки обещаний? И еще одна вещь, из-за которой инструктор не импортировал fetch (например, import fetch from 'cross-fetch'), как мое приложение использует fetch? Он только что показал, как сделать добавление пряжи cross-fetch@2.1.0 Извлекается ли выборка по умолчанию с приложением реагирования?

1 Ответ

0 голосов
/ 30 апреля 2020

Вы завершаете вызов на одну линию выше перехвата.

.then((response) => response.json())
    .then((dishes) => dispatch(addDishes(dishes)));
    .catch(error => dispatch(dishesFailed(error.message)));

на линии прямо над .catch, удалите точку с запятой и скобку. Ваш улов не является частью вашего утверждения then.

Редактировать: Можете ли вы попробовать заменить последние три строки этим? У вас есть свои параны и точки с запятой в неправильном месте. Таким образом, программа думает, что вы заканчиваете свое обещание через секунду, поэтому она не распознает часть «catch».

.then((response) => response.json())
    .then((dishes) => dispatch(addDishes(dishes))
.catch(error => dispatch(dishesFailed(error.message))));
...