Как вынести повторяющуюся загрузку JSON в функцию?

Выделите getJson(url, signal), которая проверяет response.ok и возвращает Promise с разобранным JSON. Обработку пользовательского сообщения об ошибке оставьте вызывающему сценарию.

Короткий ответ

Что ответить на собеседовании

Выделите getJson(url, signal), которая проверяет response.ok и возвращает Promise с разобранным JSON. Обработку пользовательского сообщения об ошибке оставьте вызывающему сценарию.

Подробный разбор

Ответ с пояснениями

Условие

Два обработчика браузерного приложения выполняют fetch по разным same-origin URL, проверяют HTTP-статус и читают JSON. Нужно убрать дублирование, сохранив возможность отмены запроса. Endpoint всегда возвращает JSON при успешном ответе.

Ответ

Выделите getJson(url, signal), которая проверяет response.ok и возвращает Promise с разобранным JSON. Обработку пользовательского сообщения об ошибке оставьте вызывающему сценарию.

async function getJson(url, signal) {
  const response = await fetch(url, {signal});
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  return response.json();
}

Fetch не считает HTTP 404 автоматически rejected Promise, поэтому проверка статуса нужна явно. Не превращайте любую ошибку в пустой массив: это смешает сбой с корректным пустым результатом. Для небезопасных методов отдельно соблюдают правила CSRF и авторизации, не прячут их в неявные defaults.

Источник: developer.mozilla.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее