0Pricing
JavaScript Academy · Урок

Повторные попытки и экспоненциальная задержка

Повторяйте неудачные асинхронные операции несколько раз с задержками; добавляйте экспоненциальное увеличение задержки и небольшое случайное отклонение; останавливайтесь после заданного максимума

«Повторные попытки и экспоненциальная задержка» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 3 уроков всего.

Зачем нужны повторные попытки

Цель: добавить небольшое контролируемое число повторных попыток.

  • Простой цикл повторных попыток
  • Экспоненциальное увеличение интервала ожидания
  • Небольшое случайное смещение
  • Чёткое максимальное число попыток
Повторные попытки и экспоненциальная задержка — иллюстрация 1

Вспомогательная функция задержки

Вам понадобится небольшая вспомогательная функция задержки, чтобы делать паузу между попытками.

// delay: resolve after ms
function delay(ms) {
  return new Promise(function (resolve) {
    setTimeout(function () { resolve(); }, ms);
  });
}

async function demoDelay() {
  console.log("wait...");
  await delay(5);
  console.log("done");
}

demoDelay();
Повторные попытки и экспоненциальная задержка — иллюстрация 2

Имитация нестабильной работы

Эта имитация задачи позволяет потренироваться в повторных попытках без настоящих сетевых запросов.

// Unstable task: fails first N times, then succeeds
function makeUnstable(failCount, value) {
  let left = failCount;
  return async function run() {
    if (left > 0) {
      left = left - 1;
      throw new Error("temporary");
    }
    return value;
  };
}

const sometimes = makeUnstable(2, "OK");
sometimes().catch(function (e) { console.log("first:", e.message); });
Повторные попытки и экспоненциальная задержка — иллюстрация 3

Цикл повторных попыток с фиксированным интервалом

Фиксированный интервал: выжидайте одинаковое время между попытками и остановитесь после максимального числа попыток.

// Retry a few times with a fixed wait
async function retryFixed(fn, tries, waitMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        await delay(waitMs);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const result = await retryFixed(job, 3, 5);
  console.log("fixed result:", result);
})();
Повторные попытки и экспоненциальная задержка — иллюстрация 4

Экспоненциальное увеличение интервала

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

// Exponential backoff with a tiny jitter
function jitter(ms) {
  const wiggle = Math.floor(Math.random() * 3); // 0..2
  return ms + wiggle;
}

async function retryBackoff(fn, tries, baseMs) {
  let lastError = null;
  for (let i = 1; i <= tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastError = e;
      console.log("attempt", i, "failed:", e.message);
      if (i < tries) {
        const wait = jitter(baseMs * Math.pow(2, i - 1));
        await delay(wait);
      }
    }
  }
  throw lastError;
}

(async function () {
  const job = makeUnstable(2, "OK");
  const value = await retryBackoff(job, 4, 3);
  console.log("backoff result:", value);
})();
Повторные попытки и экспоненциальная задержка — иллюстрация 5

Советы по повторным попыткам

Советы:

  • Повторяйте попытку только при временных ошибках (тайм-ауты, ограничения частоты).
  • Не повторяйте попытку при некорректных входных данных.
  • Ограничивайте число попыток (3–5) и кратко записывайте сбои в журнал.
Повторные попытки и экспоненциальная задержка — иллюстрация 6

Тест по повторным попыткам и увеличению интервала

Быстрая проверка: основы увеличения интервала.

Повторные попытки и экспоненциальная задержка — иллюстрация 7

Итоги

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

Повторные попытки и экспоненциальная задержка — иллюстрация 8

Часто задаваемые вопросы

Урок «Повторные попытки и экспоненциальная задержка» бесплатный?

Да — полный текст урока «Повторные попытки и экспоненциальная задержка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 3 уроков всего.

Чему я научусь в уроке «Повторные попытки и экспоненциальная задержка»?

Повторяйте неудачные асинхронные операции несколько раз с задержками; добавляйте экспоненциальное увеличение задержки и небольшое случайное отклонение; останавливайтесь после заданного максимума Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать JavaScript Academy?

Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Повторные попытки и экспоненциальная задержка»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке JavaScript Academy?

Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Написание асинхронных функций; try/catch; параллельное и последовательное выполнение
  2. Тайм-ауты и отмена с AbortController
  3. Повторные попытки и экспоненциальная задержка
← Назад к JavaScript Academy