JavaScript Academy · Oppitunti

E3 — Promise-allas/jono (asynkroninen rinnakkaisuus)

Suorita useita asynkronisia tehtäviä pienellä rinnakkaisuuden rajoituksella. Ylläpidä jonoa, käynnistä muutama tehtävä kerrallaan ja kerää tulokset

Oppitunti 3/38 vaihetta

E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) 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.

Mitä ja miksi

Tavoite: Suorittakaa useita asynkronisia tehtäviä kuormittamatta järjestelmää liikaa.

  • Rajoittakaa rinnakkaisuutta (esimerkiksi kaksi tehtävää kerrallaan)
  • Pitäkää käytössä yksinkertainen jonon indeksi
  • Tallentakaa tulokset taulukkoon
  • Käyttäkää aloittelijaystävällistä koodia ja pieniä apufunktioita
E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — kuvitus 1

Asynkronisen tehtävän apufunktio

Pieni apufunktio palauttaa Promise-olion, joka valmistuu viiveen jälkeen ja voi haluttaessa epäonnistua testausta varten.

// Simulate async work with setTimeout
function fakeJob(name, ms, fail) {
  return new Promise(function (resolve, reject) {
    setTimeout(function () {
      if (fail) {
        reject(new Error("fail:" + name));
      } else {
        resolve("done:" + name);
      }
    }, ms);
  });
}

console.log("demo job:", typeof fakeJob === "function");
E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — kuvitus 2

Poolin toteutus

runPool käynnistää muutaman työntekijän. Kukin hakee seuraavan tehtävän indeksin ja odottaa sen valmistumista. Tulokset säilyttävät syötteen järjestyksen.

// Run tasks with a fixed concurrency limit
async function runPool(tasks, limit) {
  // tasks: array of functions () => Promise<any>
  const results = new Array(tasks.length);
  let next = 0;

  // worker runs tasks until none left
  async function worker() {
    while (true) {
      const i = next;
      if (i >= tasks.length) return;
      next = next + 1;

      try {
        const value = await tasks[i]();
        results[i] = { ok: true, value: value };
      } catch (e) {
        results[i] = { ok: false, error: String(e) };
      }
    }
  }

  // start up to limit workers
  const workers = [];
  for (let k = 0; k < limit; k = k + 1) {
    workers.push(worker());
  }

  await Promise.all(workers);
  return results;
}

console.log("pool ready:", typeof runPool === "function");
E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — kuvitus 3

Suorittakaa pooli

Rajoittakaa käynnissä olevien tehtävien määrä 2:een. Taulukko säilyttää järjestyksen: indeksissä i on tehtävän i tulos.

// Prepare simple tasks
const jobs = [
  function () { return fakeJob("A", 300, false); },
  function () { return fakeJob("B", 200, false); },
  function () { return fakeJob("C", 150, true ); },
  function () { return fakeJob("D", 100, false); }
];

// Run with concurrency = 2
(async function () {
  const out = await runPool(jobs, 2);
  console.log("results:", out);
})();
E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — kuvitus 4

Valinnainen uudelleenyritys-wrapper

Ympäröikää tehtävä pienellä withRetry-apufunktiolla. Pitäkää lukumäärät pieninä ja logiikka yksinkertaisena.

// Optional: add retry to a task wrapper (beginner-friendly)
function withRetry(task, attempts) {
  return async function () {
    let lastErr = null;
    for (let i = 0; i < attempts; i = i + 1) {
      try {
        return await task();
      } catch (e) {
        lastErr = e;
      }
    }
    throw lastErr;
  };
}

const jobsWithRetry = [
  withRetry(function () { return fakeJob("R1", 80, true); }, 2),
  withRetry(function () { return fakeJob("R2", 60, false); }, 2)
];

(async function () {
  const out = await runPool(jobsWithRetry, 1);
  console.log("retry results:", out);
})();
E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — kuvitus 5

Aloittelijan ohjeet

Vinkit:

  • Tallentakaa tehtävät () => Promise-funktioina.
  • Ylläpitäkää jonon yhteistä seuraavaa indeksiä.
  • Käyttäkää kullekin tehtävälle try/catch-rakennetta ja tallentakaa tulokset.
  • Valitkaa aloittelijoille pieni raja (2–4).
E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — kuvitus 6

Samanaikaisuuden rajoituksen perusteet – tietovisa

Pikatarkistus: Miksi poolia käytetään?

E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — kuvitus 7

Kertaus

Kertaus: Pieni promise-pooli suorittaa tehtäviä kiinteällä rajalla, säilyttää järjestyksen tulostaulukossa ja käyttää yksinkertaista try/catch-rakennetta kullekin tehtävälle. Erinomainen malli aloittelijoille.

E3 — Promise-allas/jono (asynkroninen rinnakkaisuus) — 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 ”E3 — Promise-allas/jono (asynkroninen rinnakkaisuus)” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa JavaScript Academy-oppimispolun 3 oppituntia, myös oppitunnin “E3 — Promise-allas/jono (asynkroninen rinnakkaisuus)”. 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 ”E3 — Promise-allas/jono (asynkroninen rinnakkaisuus)”?

Suorita useita asynkronisia tehtäviä pienellä rinnakkaisuuden rajoituksella. Ylläpidä jonoa, käynnistä muutama tehtävä kerrallaan ja kerää tulokset 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 ”E3 — Promise-allas/jono (asynkroninen rinnakkaisuus)”-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. E1 — Lausekkeiden laskin (osa 1: + ja - vasemmalta oikealle)
  2. E2 — Lokianalysaattori (yksinkertaiset suodattimet ja laskurit)
  3. E3 — Promise-allas/jono (asynkroninen rinnakkaisuus)
← Takaisin: JavaScript Academy