Надёжный GET‑запрос с автоматическим повтором

Повторяйте fetch в цикле, включая HTTP-ошибки и ошибки чтения JSON. После исчерпания попыток выбросьте ошибку с заданным сообщением.

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

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

Повторяйте fetch в цикле, включая HTTP-ошибки и ошибки чтения JSON. После исчерпания попыток выбросьте ошибку с заданным сообщением.

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

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

Условие

Требуется реализовать функцию, принимающую строку‑адрес, выполнять асинхронный GET‑запрос к этому ресурсу с помощью fetch и возвращать полученный JSON. При любой ошибке запрос должен автоматически повторяться до пяти раз. Если после всех попыток данные так и не получены, функция должна отклоняться с ошибкой «Заданный URL недоступен».

function fetchWithRetry(endpoint) {
    // your code here
}

fetchWithRetry(url)
    .then(res => console.log(res))
    .catch(err => console.error(err));

Ответ

Повторяйте fetch в цикле, включая HTTP-ошибки и ошибки чтения JSON. После исчерпания попыток выбросьте ошибку с заданным сообщением.

«До пяти повторов» ниже означает один исходный запрос и пять повторных:

async function fetchWithRetry(endpoint) {
  let cause;
  for (let attempt = 0; attempt <= 5; attempt++) {
    try {
      const response = await fetch(endpoint);
      if (!response.ok) throw new Error('HTTP ' + response.status);
      return await response.json();
    } catch (error) { cause = error; }
    if (attempt < 5) await new Promise(resolve => setTimeout(resolve, 100 * 2 ** attempt));
  }
  throw new Error('Заданный URL недоступен', { cause });
}

Если нужны пять попыток всего, измените границы цикла. В production обычно не повторяют постоянные 4xx и пользовательскую отмену; отдельный таймаут нужен для запроса, который не завершается вообще.

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

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

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

Подробнее