JavaScript Academy · Oppitunti

Aikakatkaisut ja keskeyttäminen AbortControllerilla

Lisää asynkroniseen koodiin aikakatkaisuja ja peruuta työ AbortControllerilla; välitä signaalit tehtäviin, jotta ne voidaan pysäyttää ajoissa

Oppitunti 2/38 vaihetta

Aikakatkaisut ja keskeyttäminen AbortControllerilla on ilmainen JavaScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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 aikakatkaisuja ja keskeytyksiä?

Tavoite: Pysäyttäkää pitkään kestävät tehtävät turvallisesti.

  • Yksinkertaisen aikakatkaisun lisääminen
  • AbortController-olion käyttäminen
  • signal-arvon välittäminen tehtävälle
  • Ajastinten siivoaminen
Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 1

Signaalin huomioiva tehtävä

Luokaa tehtäviä, jotka listen to signal.abort ja pysäyttävät ajastimen peruutuksen yhteydessä.

// Fake fetch that respects AbortSignal
function fakeFetch(ms, value, signal) {
  return new Promise(function (resolve, reject) {
    // Abort handler
    function onAbort() {
      clearTimeout(t);
      reject(new Error("aborted"));
    }

    // If already aborted
    if (signal && signal.aborted) {
      return reject(new Error("aborted"));
    }

    // Finish timer
    const t = setTimeout(function () {
      if (signal) {
        signal.removeEventListener("abort", onAbort);
      }
      resolve(value);
    }, ms);

    // Listen for abort
    if (signal) {
      signal.addEventListener("abort", onAbort);
    }
  });
}

fakeFetch(5, "OK").then(function (v) {
  console.log("fakeFetch:", v);
});
Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 2

Abort toiminnassa

Luokaa ohjain, välittäkää sen signal-arvo ja kutsukaa abort()-metodia peruutusta varten.

// AbortController cancels signal-aware tasks
const controller = new AbortController();

fakeFetch(20, "Too slow", controller.signal)
  .then(function (v) {
    console.log("done:", v);
  })
  .catch(function (e) {
    console.log("catch:", e.message);
  });

// Abort after a short delay
setTimeout(function () {
  controller.abort();
  console.log("aborted");
}, 5);
Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 3

Aikakatkaisun kääre

Käyttäkää Promise.race-menetelmää hylkäämiseen, jos tehtävä kestää liian kauan. Tyhjentäkää ajastin finally-lohkossa.

// Add a timeout to any Promise with Promise.race
function withTimeout(promise, ms) {
  return Promise.race([
    promise,
    new Promise(function (_resolve, reject) {
      const t = setTimeout(function () {
        reject(new Error("timeout"));
      }, ms);
      // Small trick: clear timer when the main promise settles
      promise.finally(function () { clearTimeout(t); });
    })
  ]);
}

// Demo: this will time out
withTimeout(fakeFetch(30, "late"), 10)
  .then(function (v) { console.log("value:", v); })
  .catch(function (e) { console.log("timeout:", e.message); });
Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 4

Aikakatkaisu ja keskeytys yhdessä

Jos aikakatkaisu voittaa, kutsukaa abort()-metodia, jotta taustalla oleva työ pysähtyy aikaisemmin.

// Combine: abort if timeout fires
async function fetchWithTimeout(msWork, msTimeout) {
  const c = new AbortController();

  const task = fakeFetch(msWork, "data", c.signal);

  // If timeout wins, abort the task
  try {
    const result = await withTimeout(task, msTimeout);
    return result;
  } catch (e) {
    c.abort();
    throw e;
  }
}

fetchWithTimeout(25, 10)
  .then(function (v) { console.log("got:", v); })
  .catch(function (e) { console.log("failed:", e.message); });
Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 5

Vinkit ja tarkistuslista

Vinkit:

  • Tyhjentäkää ajastimet aina finally-lohkossa.
  • Välittäkää signal tehtäville ja tarkistakaa signal.aborted.
  • Suosikaa yhtä ohjainta pyyntöä kohden.
Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 6

AbortController-perusteiden koe

Pikatarkistus: Peruutusmalli.

Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 7

Kertaus

Kertaus: Rakensitte signaalin huomioivan tehtävän, peruutitte sen AbortControllerilla, lisäsitte aikakatkaisun Promise.race-funktion avulla ja yhdistitte nämä turvallisia ennenaikaisia lopetuksia varten.

Aikakatkaisut ja keskeyttäminen AbortControllerilla — kuvitus 8
Aloita maksutta

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 ”Aikakatkaisut ja keskeyttäminen AbortControllerilla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “Aikakatkaisut ja keskeyttäminen AbortControllerilla”. 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 ”Aikakatkaisut ja keskeyttäminen AbortControllerilla”?

Lisää asynkroniseen koodiin aikakatkaisuja ja peruuta työ AbortControllerilla; välitä signaalit tehtäviin, jotta ne voidaan pysäyttää ajoissa 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 2/3.

Kuinka kauan ”Aikakatkaisut ja keskeyttäminen AbortControllerilla”-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

  1. Asynkronisten funktioiden kirjoittaminen; try/catch; rinnakkainen ja peräkkäinen suoritus
  2. Aikakatkaisut ja keskeyttäminen AbortControllerilla
  3. Uudelleenyritys- ja backoff-mallit
← Takaisin: JavaScript Academy