JavaScript Academy · leksjon

Mønstre for nye forsøk og backoff

Prøv mislykket asynkront arbeid på nytt noen ganger med forsinkelser; legg til eksponentiell backoff og litt jitter; stopp etter et tydelig maksimum.

Leksjon 3 av 38 trinn

Mønstre for nye forsøk og backoff er en gratis leksjon i JavaScript Academy på CoddyKit. Dette er leksjon 3 av 3. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i JavaScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i JavaScript Academy inneholder totalt 3 leksjoner.

Hvorfor prøve på nytt?

Mål: Legg til små, kontrollerte nye forsøk.

  • Enkel løkke for nye forsøk
  • Eksponentiell backoff
  • Litt jitter
  • Tydelig maksimalt antall forsøk
Mønstre for nye forsøk og backoff — illustrasjon 1

Hjelpefunksjon for forsinkelse

De trenger en liten hjelpefunksjon for forsinkelse for å vente mellom forsøkene.

// 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();
Mønstre for nye forsøk og backoff — illustrasjon 2

Simuler ustabilt arbeid

Denne simulerte oppgaven lar oss øve på nye forsøk uten ekte nettverkskall.

// 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); });
Mønstre for nye forsøk og backoff — illustrasjon 3

Fast løkke for nye forsøk

Fast intervall: vent like lenge mellom forsøkene, og stopp etter maksimalt antall forsøk.

// 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);
})();
Mønstre for nye forsøk og backoff — illustrasjon 4

Eksponentiell backoff

Backoff: øk ventetiden for hvert forsøk, og legg til litt jitter for å unngå topper.

// 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);
})();
Mønstre for nye forsøk og backoff — illustrasjon 5

Tips for nye forsøk

Tips:

  • Prøv bare på nytt ved midlertidige feil (tidsavbrudd, hastighetsbegrensninger).
  • Ikke prøv på nytt ved ugyldige inndata.
  • Hold antallet forsøk lavt (3–5), og logg feil kort.
Mønstre for nye forsøk og backoff — illustrasjon 6

Quiz om nye forsøk og backoff

Kort sjekk: Grunnleggende backoff.

Mønstre for nye forsøk og backoff — illustrasjon 7

Oppsummering

Oppsummering: De laget en fast løkke for nye forsøk, la til eksponentiell backoff med litt jitter og angav et maksimalt antall forsøk for å holde appene responsive.

Mønstre for nye forsøk og backoff — illustrasjon 8
Gratis å komme i gang

Lær deg JavaScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
59
Leksjoner
200

Ofte stilte spørsmål

Er leksjonen «Mønstre for nye forsøk og backoff» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien JavaScript Academy, inkludert «Mønstre for nye forsøk og backoff», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i JavaScript Academy inneholder totalt 3 leksjoner.

Hva lærer jeg i «Mønstre for nye forsøk og backoff»?

Prøv mislykket asynkront arbeid på nytt noen ganger med forsinkelser; legg til eksponentiell backoff og litt jitter; stopp etter et tydelig maksimum. Du øver på JavaScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med JavaScript Academy?

Ingen tidligere erfaring er nødvendig. JavaScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 3.

Hvor lang tid tar leksjonen «Mønstre for nye forsøk og backoff»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne JavaScript Academy-leksjonen?

Ja. Alle JavaScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Skrive async-funksjoner; try/catch; parallelt kontra sekvensielt
  2. Tidsavbrudd og avbryting med AbortController
  3. Mønstre for nye forsøk og backoff
← Tilbake til JavaScript Academy