JavaScript Academy · Ders

E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık)

Birçok eşzamansız görevi küçük bir eşzamanlılık sınırıyla çalıştırın. Kuyruk tutun, aynı anda birkaç görev başlatın ve sonuçları toplayın.

3. ders / 38 adım

E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık), CoddyKit'te ücretsiz bir JavaScript Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, JavaScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. JavaScript Academy kursu toplamda 3 dersten oluşur.

Ne ve neden?

Amaç: Sistemi aşırı yüklemeden birçok eşzamansız işi çalıştırın.

  • Eşzamanlılığı sınırlayın (ör. aynı anda 2 iş)
  • Basit bir kuyruk dizini tutun
  • Sonuçları bir dizide saklayın
  • Yeni başlayanlara uygun kod ve küçük yardımcı işlevler kullanın
E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 1

Eşzamansız iş yardımcı işlevi

Küçük bir yardımcı işlev, bir gecikmeden sonra çözülen bir Promise döndürür; deneme amacıyla isteğe bağlı olarak başarısız olabilir.

// 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 Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 2

Havuz uygulaması

runPool birkaç çalışan başlatır; her biri sonraki görev dizinini alır ve görevi await ile bekler. Sonuçlar girdi sırasını korur.

// 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 Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 3

Havuzu çalıştırma

Aynı anda yürütülen iş sayısını 2 ile sınırlayın. Dizi sıralamayı korur: i dizini, i görev sonucunu tutar.

// 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 Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 4

İsteğe bağlı yeniden deneme sarmalayıcısı

Bir görevi küçük bir withRetry yardımcı işleviyle sarın. Sayıları küçük, mantığı basit tutun.

// 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 Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 5

Başlangıç düzeyi yönlendirme

İpuçları:

  • Görevleri () => Promise işlevleri olarak saklayın.
  • Kuyruk için ortak bir next dizini tutun.
  • Her görev için try/catch kullanın ve sonuçları saklayın.
  • Başlangıç düzeyindekiler için küçük bir sınır (2–4) seçin.
E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 6

Eşzamanlılık sınırı temelleri sınavı

Hızlı kontrol: Neden havuz kullanılır?

E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 7

Özet

Özet: Küçük bir Promise havuzu, görevleri sabit bir sınırla çalıştırır, sonuç dizisinde sırayı korur ve her görev için basit bir try/catch kullanır. Başlangıç düzeyi için harika bir kalıptır.

E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık) — resim 8
Başlamak ücretsiz

Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
59
Dersler
200

Sıkça Sorulan Sorular

“E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık)” dersi ücretsiz mi?

Evet — “E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık)” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve JavaScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. JavaScript Academy kursu toplamda 3 dersten oluşur.

“E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık)” dersinde ne öğreneceğim?

Birçok eşzamansız görevi küçük bir eşzamanlılık sınırıyla çalıştırın. Kuyruk tutun, aynı anda birkaç görev başlatın ve sonuçları toplayın. JavaScript Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

JavaScript Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te JavaScript Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.

“E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık)” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu JavaScript Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her JavaScript Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. E1 — İfade Değerlendirici (1. kısım: + ve - LTR)
  2. E2 — Günlük Çözümleyici (Basit Süzgeçler ve Sayaçlar)
  3. E3 — Promise Havuzu/Kuyruğu (Eşzamansız Eşzamanlılık)
← JavaScript Academy Sayfasına Dön