0Pricing
JavaScript Academy · Lekcja

E3 — pula/kolejka Promise (asynchroniczna współbieżność)

Uruchamianie wielu zadań asynchronicznych z niewielkim limitem współbieżności. Utrzymywanie kolejki, uruchamianie kilku zadań naraz i zbieranie wyników

E3 — pula/kolejka Promise (asynchroniczna współbieżność) to bezpłatna lekcja JavaScript Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej JavaScript Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co i dlaczego

Cel: uruchamiać wiele zadań async bez przeciążania systemu.

  • Ograniczanie równoległości (np. 2 zadania naraz)
  • Przechowywanie prostego indeksu kolejki
  • Przechowywanie wyników w tablicy
  • Kod przyjazny początkującym i małe funkcje pomocnicze
E3 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 1

Pomocnicze zadanie async

Mała funkcja pomocnicza zwraca obiekt Promise, który zostaje rozstrzygnięty po opóźnieniu; opcjonalnie może zakończyć się niepowodzeniem na potrzeby testów.

// 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 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 2

Implementacja puli

runPool uruchamia kilku pracowników; każdy pobiera indeks następnego zadania i czeka na jego wykonanie. Wyniki zachowują kolejność danych wejściowych.

// 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 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 3

Uruchamianie puli

Należy ograniczyć liczbę aktywnych zadań do 2. Tablica zachowuje kolejność: indeks i zawiera wynik zadania 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);
})();
E3 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 4

Opcjonalna otoczka ponawiania prób

Zadanie należy opakować za pomocą małej funkcji pomocniczej withRetry. Liczby powinny być małe, a logika prosta.

// 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 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 5

Wskazówki dla początkujących

Wskazówki:

  • Przechowuj zadania jako funkcje () => Promise.
  • Zachowuj wspólny indeks następnego zadania dla kolejki.
  • Używaj try/catch dla każdego zadania i zapisuj wyniki.
  • Wybierz niewielki limit (2–4), odpowiedni dla początkujących.
E3 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 6

Podstawy limitu współbieżności — quiz

Szybkie sprawdzenie: Po co używać puli?

E3 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 7

Podsumowanie

Podsumowanie: Niewielka pula promise uruchamia zadania z ustalonym limitem, zachowuje ich kolejność w tablicy wyników i używa prostego try/catch dla każdego zadania. To świetny schemat dla początkujących.

E3 — pula/kolejka Promise (asynchroniczna współbieżność) — ilustracja 8

Często zadawane pytania

Czy lekcja „E3 — pula/kolejka Promise (asynchroniczna współbieżność)” jest bezpłatna?

Tak — pełny tekst „E3 — pula/kolejka Promise (asynchroniczna współbieżność)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu JavaScript Academy, przejdź na CoddyKit PRO. Kurs JavaScript Academy zawiera 3 lekcji w sumie.

Co nauczysz się w „E3 — pula/kolejka Promise (asynchroniczna współbieżność)”?

Uruchamianie wielu zadań asynchronicznych z niewielkim limitem współbieżności. Utrzymywanie kolejki, uruchamianie kilku zadań naraz i zbieranie wyników Ćwiczysz JavaScript Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć JavaScript Academy?

Nie wymagamy żadnego doświadczenia. JavaScript Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.

Ile czasu zajmuje lekcja „E3 — pula/kolejka Promise (asynchroniczna współbieżność)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji JavaScript Academy?

Tak. Każda lekcja JavaScript Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. E1 — ewaluator wyrażeń (część 1: + i - od lewej do prawej)
  2. E2 — analizator logów (proste filtry i liczniki)
  3. E3 — pula/kolejka Promise (asynchroniczna współbieżność)
← Powrót do JavaScript Academy