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

Вспомогательная функция задержки
Вам понадобится небольшая вспомогательная функция задержки, чтобы делать паузу между попытками.
// 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();

Имитация нестабильной работы
Эта имитация задачи позволяет потренироваться в повторных попытках без настоящих сетевых запросов.
// 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); });

Цикл повторных попыток с фиксированным интервалом
Фиксированный интервал: выжидайте одинаковое время между попытками и остановитесь после максимального числа попыток.
// 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);
})();

Экспоненциальное увеличение интервала
Увеличение интервала: увеличивайте время ожидания с каждой попыткой и добавьте небольшое случайное смещение, чтобы избежать всплесков.
// 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);
})();

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

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

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

Часто задаваемые вопросы
Урок «Повторные попытки и экспоненциальная задержка» бесплатный?
Да — полный текст урока «Повторные попытки и экспоненциальная задержка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 — локальная установка не требуется.
Все уроки этого курса
- Написание асинхронных функций; try/catch; параллельное и последовательное выполнение
- Тайм-ауты и отмена с AbortController
- Повторные попытки и экспоненциальная задержка