E3 — Promise-pool/kö (asynkron samtidighet)
Kör många asynkrona uppgifter med en liten gräns för samtidighet. Håll en kö, starta några åt gången och samla resultaten.
E3 — Promise-pool/kö (asynkron samtidighet) ä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.
Vad och varför
Mål: Köra många asynkrona jobb utan att överbelasta systemet.
- Begränsa samtidigheten, till exempel till 2 åt gången
- Håll ett enkelt köindex
- Lagra resultaten i en array
- Använd nybörjarvänlig kod och små hjälpfunktioner

Hjälpfunktion för asynkrona jobb
En liten hjälpfunktion returnerar ett Promise som löser sig efter en fördröjning och som valfritt kan misslyckas vid testning.
// 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");
Implementera poolen
runPool startar några arbetare. Var och en hämtar nästa uppgiftsindex och väntar på uppgiften. Resultaten behåller indataordningen.
// 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");
Kör poolen
Begränsa till 2 pågående jobb. Arrayen behåller ordningen: index i innehåller resultatet från uppgift i.
// 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);
})();
Valfri retry-wrapper
Omslut en uppgift med en liten withRetry-hjälpfunktion. Håll talen små och logiken enkel.
// 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);
})();
Vägledning för nybörjare
Tips:
- Lagra uppgifter som funktioner av typen () => Promise.
- Behåll ett gemensamt nästa index för kön.
- Använd try/catch för varje uppgift och lagra resultaten.
- Välj en liten gräns (2–4) för nybörjare.

Grunderna i samtidighetsbegränsning – frågesport
Snabbtest: Varför en pool?

Sammanfattning
Sammanfattning: En liten promise pool kör uppgifter med en fast gräns, bevarar ordningen i en resultatarray och använder enkel try/catch för varje uppgift. Ett utmärkt mönster för nybörjare.

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 ”E3 — Promise-pool/kö (asynkron samtidighet)” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen JavaScript Academy, inklusive ”E3 — Promise-pool/kö (asynkron samtidighet)”, 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 ”E3 — Promise-pool/kö (asynkron samtidighet)”?
Kör många asynkrona uppgifter med en liten gräns för samtidighet. Håll en kö, starta några åt gången och samla resultaten. 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 ”E3 — Promise-pool/kö (asynkron samtidighet)”?
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
- E1 — Uttrycksutvärderare (del 1: + och - från vänster till höger)
- E2 — Logganalysator (enkla filter och räknare)
- E3 — Promise-pool/kö (asynkron samtidighet)