0Pricing
JavaScript Academy · บทเรียน

E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)

เรียกใช้งาน async จำนวนมากด้วยขีดจำกัดการทำงานพร้อมกันขนาดเล็ก จัดคิว เริ่มทีละไม่กี่งาน และรวบรวมผลลัพธ์

E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน) เป็นบทเรียน JavaScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน JavaScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

อะไรและเพราะเหตุใด

เป้าหมาย: เรียกใช้งานแบบ async จำนวนมากโดยไม่ทำให้ระบบรับภาระมากเกินไป

  • จำกัดการทำงานพร้อมกัน เช่น ครั้งละ 2 งาน
  • เก็บดัชนีคิวแบบง่าย
  • เก็บผลลัพธ์ไว้ในอาร์เรย์
  • ใช้โค้ดที่เหมาะกับผู้เริ่มต้นและตัวช่วยขนาดเล็ก
E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน) — ภาพประกอบ 1

ตัวช่วยงานแบบ async

ตัวช่วยขนาดเล็กจะส่งคืน Promise ที่เสร็จสมบัติหลังจากหน่วงเวลา และอาจล้มเหลวได้เพื่อใช้ในการทดสอบ

// 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 (การทำงาน async พร้อมกัน) — ภาพประกอบ 2

การทำพูล

runPool จะเริ่มตัวทำงานจำนวนหนึ่ง แต่ละตัวดึงดัชนีงานถัดไปแล้วรอผลลัพธ์ ผลลัพธ์ยังคงเรียงตามลำดับอินพุต

// 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 (การทำงาน async พร้อมกัน) — ภาพประกอบ 3

เรียกใช้พูล

จำกัดงานที่กำลังทำอยู่ให้เหลือ2 งาน อาร์เรย์ยังคงลำดับเดิม: ดัชนี i จะเก็บผลลัพธ์ของงาน 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 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน) — ภาพประกอบ 4

ตัวห่อหุ้มสำหรับลองใหม่โดยเลือกใช้ได้

ครอบงานด้วยตัวช่วย withRetry ขนาดเล็ก ใช้จำนวนครั้งให้น้อยและทำตรรกะให้เรียบง่าย

// 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 (การทำงาน async พร้อมกัน) — ภาพประกอบ 5

คำแนะนำสำหรับผู้เริ่มต้น

เคล็ดลับ:

  • จัดเก็บงานเป็นฟังก์ชัน () => พรอมิส
  • ใช้ ดัชนี next ร่วมกันสำหรับคิว
  • ใช้ try/catch กับงานแต่ละรายการและจัดเก็บผลลัพธ์
  • กำหนดขีดจำกัดให้ต่ำ เช่น 2–4 สำหรับผู้เริ่มต้น
E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน) — ภาพประกอบ 6

แบบทดสอบพื้นฐานเรื่องขีดจำกัดการทำงานพร้อมกัน

ตรวจสอบความเข้าใจอย่างรวดเร็ว: ทำไมต้องใช้พูล

E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน) — ภาพประกอบ 7

ทบทวน

ทบทวน: พูลพรอมิสขนาดเล็กจะเรียกใช้งานโดยมีขีดจำกัดคงที่ รักษาลำดับในอาร์เรย์ผลลัพธ์ และใช้ try/catch อย่างง่ายกับงานแต่ละรายการ เป็นรูปแบบที่เหมาะสำหรับผู้เริ่มต้น

E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน) — ภาพประกอบ 8

คำถามที่พบบ่อย

บทเรียน “E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส JavaScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส JavaScript Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)”

เรียกใช้งาน async จำนวนมากด้วยขีดจำกัดการทำงานพร้อมกันขนาดเล็ก จัดคิว เริ่มทีละไม่กี่งาน และรวบรวมผลลัพธ์ คุณปฏิบัติ JavaScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน JavaScript Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน JavaScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน

บทเรียน “E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน JavaScript Academy นี้ได้ไหม

ได้ บทเรียน JavaScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)
  2. E2 — ตัววิเคราะห์บันทึก (ตัวกรองและตัวนับอย่างง่าย)
  3. E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)
← กลับไปที่ JavaScript Academy