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

รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล

จำลองการทำงานพร้อมกันด้วย Promise.all / allSettled / race ทำความเข้าใจชนิดข้อมูลผลลัพธ์ และสร้างตัวช่วยที่ปลอดภัย

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

บทนำ

เป้าหมาย: เรียกใช้งานหลายงานพร้อมกันด้วย Promise.all จัดการผลลัพธ์ที่หลากหลายผ่าน allSettled และใช้ race สำหรับการหมดเวลาและทางเลือกสำรอง เรียนรู้ ชนิดข้อมูล ที่แต่ละแบบส่งกลับ

all: ชนิดทูเพิล

Promise.all ที่ใช้กับ ทูเพิล จะรักษาชนิดและลำดับขององค์ประกอบไว้ โดยรอแต่ละองค์ประกอบจนได้ชนิดข้อมูลภายใน

async function one(): Promise<number> { return 1 }
async function two(): Promise<string> { return "two" }

async function runAll() {
  const [a, b] = await Promise.all([one(), two()]);
  // a: number, b: string
  console.log(a + 1, b.toUpperCase());
}

runAll();

all: การแมปพร้อมกัน

เริ่มงานหลายงานก่อน แล้วจึง await งานทั้งหมดพร้อมกัน Promise.all จะให้ผลเป็น string[] ในกรณีนี้

async function fetchItem(id: number): Promise<string> {
  return `item-${id}`;
}

async function getMany(ids: number[]): Promise<string[]> {
  const tasks = ids.map(id => fetchItem(id)); // start all
  return Promise.all(tasks); // await all
}

getMany([1,2,3]).then(xs => console.log(xs));

การระบุชนิดของ allSettled

allSettled จะไม่ปฏิเสธผลลัพธ์ แต่จะแก้ไขเป็นอาร์เรย์ของออบเจ็กต์ผลลัพธ์ที่ สำเร็จ หรือ ล้มเหลว ซึ่งคุณสามารถจำกัดชนิดด้วย status ได้

async function mightFail(n: number): Promise<number> {
  if (n % 2 === 0) return n; else throw new Error("odd")
}

async function runSettled() {
  const results = await Promise.allSettled([mightFail(1), mightFail(2)]);
  for (const r of results) {
    if (r.status === "fulfilled") {
      // r: PromiseFulfilledResult<number>
      console.log("ok", r.value);
    } else {
      // r: PromiseRejectedResult
      console.warn("fail", r.reason);
    }
  }
}

runSettled();

race และการหมดเวลา

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

function timeout<T>(ms: number, msg = "Timeout"): Promise<T> {
  return new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), ms));
}

async function slow(): Promise<string> { return new Promise(res => setTimeout(() => res("done"), 100)); }

async function withTimeout() {
  const result = await Promise.race<Promise<string>>([
    slow(),
    timeout<string>(50, "Too slow"),
  ]);
  console.log(result);
}

withTimeout().catch(e => console.error("raced:", e.message));

เคล็ดลับและตัวเลือก

เคล็ดลับ:

  • all: รวบรวมผลลัพธ์แบบหยุดทันทีเมื่อพบความล้มเหลว
  • allSettled: รวบรวมทั้งผลสำเร็จและข้อผิดพลาดโดยไม่โยนข้อผิดพลาด
  • race: ใช้สำหรับการหมดเวลาและทางเลือกสำรอง โดยระบุชนิดขององค์ประกอบให้ชัดเจน

ตรวจสอบการระบุชนิดของ Promise.all

ตรวจสอบอย่างรวดเร็ว: ข้อความใดเกี่ยวกับการระบุชนิดของ Promise.all ที่เป็น TRUE

สรุป

สรุป: ใช้ all สำหรับการทำงานแบบขนานที่มีชนิดข้อมูล ใช้ allSettled เพื่อตรวจสอบผลลัพธ์ทั้งหมด และใช้ race สำหรับการหมดเวลา โดยต้องรู้โครงสร้างข้อมูลที่แต่ละส่วนติดต่อโปรแกรมส่งกลับ

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

บทเรียน “รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล”

จำลองการทำงานพร้อมกันด้วย Promise.all / allSettled / race ทำความเข้าใจชนิดข้อมูลผลลัพธ์ และสร้างตัวช่วยที่ปลอดภัย คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Promise และการกำหนดชนิดข้อมูล async/await
  2. การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch
  3. รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล
← กลับไปที่ TypeScript Academy