Uudelleenyritys- ja backoff-mallit
Yritä epäonnistunutta asynkronista työtä muutaman kerran viiveillä; lisää eksponentiaalinen backoff ja pieni jitter; lopeta selkeän enimmäismäärän jälkeen
Uudelleenyritys- ja backoff-mallit on ilmainen JavaScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/3. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu JavaScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.
Miksi yrittää uudelleen?
Tavoite: Lisätkää pieniä, hallittuja uudelleenyrityksiä.
- Yksinkertainen uudelleenyrityslooppi
- Eksponentiaalinen backoff
- Pieni jitter
- Selkeä yritysten enimmäismäärä

Viiveen apufunktio
Tarvitsette pienen viive-apufunktion, joka keskeyttää suorituksen yritysten välillä.
// 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();

Simuloitu epävakaa työ
Tämän simuloidun tehtävän avulla voitte harjoitella uudelleenyrityksiä ilman todellisia verkkokutsuja.
// 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); });

Kiinteä uudelleenyrityslooppi
Kiinteä aikaväli: odottakaa yritysten välillä aina yhtä kauan ja lopettakaa enimmäisyritysmäärän jälkeen.
// 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);
})();

Eksponentiaalinen backoff
Backoff: kasvattakaa odotusaikaa jokaisella yrityksellä ja lisätkää pieni jitter piikkien välttämiseksi.
// 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);
})();

Uudelleenyritysten vinkit
Vinkit:
- Yrittäkää uudelleen vain tilapäisten virheiden yhteydessä, kuten aikakatkaisujen ja nopeusrajoitusten tapauksessa.
- Älkää yrittäkö uudelleen virheellisten syötteiden vuoksi.
- Pitäkää yritysten määrä pienenä (3–5) ja kirjatkaa epäonnistumiset lyhyesti.

Uudelleenyrityksen ja backoffin koe
Pikatarkistus: Backoffin perusteet.

Kertaus
Kertaus: Rakensitte kiinteän uudelleenyritysloopin, lisäsitte pienen jitterin sisältävän eksponentiaalisen backoffin ja määrititte yritysten enimmäismäärän, jotta sovellukset pysyvät responsiivisina.

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 59
- Oppitunnit
- 200
Usein kysytyt kysymykset
Onko oppitunti ”Uudelleenyritys- ja backoff-mallit” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “Uudelleenyritys- ja backoff-mallit”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. JavaScript Academy-kurssilla on yhteensä 3 oppituntia.
Mitä opin oppitunnilla ”Uudelleenyritys- ja backoff-mallit”?
Yritä epäonnistunutta asynkronista työtä muutaman kerran viiveillä; lisää eksponentiaalinen backoff ja pieni jitter; lopeta selkeän enimmäismäärän jälkeen Harjoittelet JavaScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni JavaScript Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin JavaScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/3.
Kuinka kauan ”Uudelleenyritys- ja backoff-mallit”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä JavaScript Academy-oppitunnilla?
Kyllä. Jokainen JavaScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Asynkronisten funktioiden kirjoittaminen; try/catch; rinnakkainen ja peräkkäinen suoritus
- Aikakatkaisut ja keskeyttäminen AbortControllerilla
- Uudelleenyritys- ja backoff-mallit