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
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

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");
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");
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);
})();
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);
})();
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).

Samanaikaisuuden rajoituksen perusteet – tietovisa
Pikatarkistus: Miksi poolia käytetään?

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.

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
- E1 — Lausekkeiden laskin (osa 1: + ja - vasemmalta oikealle)
- E2 — Lokianalysaattori (yksinkertaiset suodattimet ja laskurit)
- E3 — Promise-allas/jono (asynkroninen rinnakkaisuus)