Wzorce ponawiania prób i backoff
Ponawianie nieudanych operacji asynchronicznych kilka razy z opóźnieniami; dodawanie wykładniczego backoff i niewielkiego jittera oraz kończenie po jasno określonej liczbie prób
Wzorce ponawiania prób i backoff to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.
Po co ponawiać próby?
Cel: dodać niewielką liczbę kontrolowanych ponowień.
- Prosta pętla ponawiania
- Wykładnicze zwiększanie opóźnienia
- Niewielki jitter
- Jasno określona maksymalna liczba prób

Pomocnicza funkcja opóźnienia
Potrzebna jest niewielka pomocnicza funkcja delay, aby wstrzymywać działanie między próbami.
// 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();

Symulowanie niestabilnego działania
To fikcyjne zadanie pozwala ćwiczyć ponawianie prób bez wykonywania rzeczywistych wywołań sieciowych.
// 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); });

Stała pętla ponawiania
Stały odstęp: należy odczekać tyle samo między próbami i zakończyć działanie po osiągnięciu maksymalnej liczby prób.
// 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);
})();

Wykładnicze zwiększanie opóźnienia
Backoff: przy każdej próbie należy zwiększać czas oczekiwania i dodać niewielki jitter, aby uniknąć nagłych skoków obciążenia.
// 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);
})();

Wskazówki dotyczące ponawiania prób
Wskazówki:
- Próby należy ponawiać tylko w przypadku tymczasowych błędów, takich jak przekroczenie limitu czasu lub limitu żądań.
- Nie należy ponawiać prób w przypadku nieprawidłowych danych wejściowych.
- Liczba prób powinna być niewielka (3–5), a błędy należy krótko rejestrować.

Quiz z ponawiania prób i backoff
Szybkie sprawdzenie: podstawy backoff.

Podsumowanie
Podsumowanie: utworzono stałą pętlę ponawiania prób, dodano wykładnicze zwiększanie opóźnienia z niewielkim jitterem oraz ustawiono maksymalną liczbę prób, aby aplikacje zachowywały płynność działania.

Często zadawane pytania
Czy lekcja „Wzorce ponawiania prób i backoff” jest bezpłatna?
Tak — pełny tekst „Wzorce ponawiania prób i backoff” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Wzorce ponawiania prób i backoff”?
Ponawianie nieudanych operacji asynchronicznych kilka razy z opóźnieniami; dodawanie wykładniczego backoff i niewielkiego jittera oraz kończenie po jasno określonej liczbie prób Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?
Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.
Ile czasu zajmuje lekcja „Wzorce ponawiania prób i backoff”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?
Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pisanie funkcji async; try/catch; równolegle a sekwencyjnie
- Limity czasu i przerywanie za pomocą AbortController
- Wzorce ponawiania prób i backoff