JavaScript Academy · Lektion

Mönster för omförsök och backoff

Försök om misslyckade asynkrona uppgifter några gånger med fördröjningar; lägg till exponentiell backoff och lite jitter; stoppa efter ett tydligt maxantal.

Lektion 3 av 38 steg

Mönster för omförsök och backoff är en gratis lektion i JavaScript Academy på CoddyKit. Detta är lektion 3 av 3. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för JavaScript Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i JavaScript Academy innehåller totalt 3 lektioner.

Varför försöka igen?

Mål: Lägg till små, kontrollerade återförsök.

  • Enkel loop för återförsök
  • Exponentiell backoff
  • Lite jitter
  • Tydligt maximalt antal försök
Mönster för omförsök och backoff — illustration 1

Hjälpfunktion för fördröjning

Ni behöver en liten hjälpfunktion för fördröjning som pausar mellan försöken.

// 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önster för omförsök och backoff — illustration 2

Simulera instabilt arbete

Den här simulerade uppgiften gör det möjligt att öva på återförsök utan riktiga nätverksanrop.

// 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önster för omförsök och backoff — illustration 3

Loop för fasta återförsök

Fast intervall: vänta lika länge mellan försöken och sluta efter maximalt antal försö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önster för omförsök och backoff — illustration 4

Exponentiell backoff

Backoff: öka väntetiden vid varje försök och lägg till lite jitter för att undvika toppar.

// 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önster för omförsök och backoff — illustration 5

Tips för återförsök

Tips:

  • Gör bara nya försök vid tillfälliga fel (timeouts, rate limits).
  • Gör inte nya försök vid felaktiga indata.
  • Håll antalet försök lågt (3–5) och logga fel kortfattat.
Mönster för omförsök och backoff — illustration 6

Quiz om återförsök och backoff

Snabb kontroll: Grunderna i backoff.

Mönster för omförsök och backoff — illustration 7

Sammanfattning

Sammanfattning: Ni byggde en loop för fasta återförsök, lade till exponentiell backoff med lite jitter och angav ett maximalt antal försök för att hålla appar responsiva.

Mönster för omförsök och backoff — illustration 8
Gratis att börja

Lär dig JavaScript med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
59
Lektioner
200

Vanliga frågor

Är lektionen ”Mönster för omförsök och backoff” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen JavaScript Academy, inklusive ”Mönster för omförsök och backoff”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i JavaScript Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”Mönster för omförsök och backoff”?

Försök om misslyckade asynkrona uppgifter några gånger med fördröjningar; lägg till exponentiell backoff och lite jitter; stoppa efter ett tydligt maxantal. Ni övar på JavaScript Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig JavaScript Academy?

Du behöver inga förkunskaper. Utbildningen i JavaScript Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 3.

Hur lång tid tar lektionen ”Mönster för omförsök och backoff”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här JavaScript Academy-lektionen?

Ja. Varje JavaScript Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Skriva async-funktioner; try/catch; parallellt kontra sekventiellt
  2. Tidsgränser och avbrytning med AbortController
  3. Mönster för omförsök och backoff
← Tillbaka till JavaScript Academy