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