Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: async, retry, delay, promise, error handling

Как реализовать функцию повторного вызова асинхронной операции с задержкой между попытками?

Вопрос проверяет понимание реализации механизма повторных попыток (retry) для асинхронных операций с задержкой, что необходимо для создания отказоустойчивых приложений.

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

Функция повторного вызова асинхронной операции с задержкой реализуется с помощью рекурсии или цикла. В случае ошибки операция повторяется через заданный интервал времени до достижения максимального числа попыток. Это повышает надежность приложения при временных сбоях сети или сервера.

Длинный ответ

Концепция retry с задержкой

Механизм повторных попыток (retry) позволяет автоматически перезапускать асинхронную операцию при возникновении ошибки. Задержка между попытками предотвращает перегрузку системы и увеличивает шансы на успех при временных проблемах.

Реализация на JavaScript

Функция принимает асинхронную операцию, максимальное количество попыток и задержку в миллисекундах. При ошибке она ждет указанное время и рекурсивно вызывает себя с уменьшенным счетчиком попыток.

async function retryWithDelay(fn, maxAttempts, delay) {
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
    try {
      return await fn();
    } catch (error) {
      if (attempt === maxAttempts) throw error;
      await new Promise(resolve => setTimeout(resolve, delay));
    }
  }
}

Пример использования

Предположим, у нас есть функция запроса к API, которая иногда падает с ошибкой 503. Используя retryWithDelay, мы можем автоматически повторить запрос через 1 секунду.

async function fetchData() {
  const response = await fetch('/api/data');
  if (!response.ok) throw new Error('Server error');
  return response.json();
}

retryWithDelay(fetchData, 3, 1000)
  .then(data => console.log(data))
  .catch(err => console.error('Failed after 3 attempts', err));

Где применяется

  • Сетевые запросы к внешним API
  • Подключение к базам данных
  • Операции с файловой системой
  • Микросервисная архитектура

Вывод: Используйте retry с задержкой для повышения отказоустойчивости приложений, особенно при работе с ненадежными внешними сервисами или временными сбоями.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#async

#retry

#delay

#promise

#error handling

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию