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

ตัวช่วยงานแบบ 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");
การทำพูล
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");
เรียกใช้พูล
จำกัดงานที่กำลังทำอยู่ให้เหลือ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);
})();
ตัวห่อหุ้มสำหรับลองใหม่โดยเลือกใช้ได้
ครอบงานด้วยตัวช่วย 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);
})();
คำแนะนำสำหรับผู้เริ่มต้น
เคล็ดลับ:
- จัดเก็บงานเป็นฟังก์ชัน () => พรอมิส
- ใช้ ดัชนี next ร่วมกันสำหรับคิว
- ใช้ try/catch กับงานแต่ละรายการและจัดเก็บผลลัพธ์
- กำหนดขีดจำกัดให้ต่ำ เช่น 2–4 สำหรับผู้เริ่มต้น

แบบทดสอบพื้นฐานเรื่องขีดจำกัดการทำงานพร้อมกัน
ตรวจสอบความเข้าใจอย่างรวดเร็ว: ทำไมต้องใช้พูล

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

คำถามที่พบบ่อย
บทเรียน “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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- E1 — ตัวประเมินนิพจน์ (ตอนที่ 1: + และ - แบบ LTR)
- E2 — ตัววิเคราะห์บันทึก (ตัวกรองและตัวนับอย่างง่าย)
- E3 — กลุ่มงานหรือคิว Promise (การทำงาน async พร้อมกัน)