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

การจัดการข้อผิดพลาดในโค้ด TypeScript แบบอะซิงก์

จัดการข้อผิดพลาดแบบอะซิงก์ด้วยตัวห่อหุ้มและยูทิลิตีที่ระบุชนิด

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

ยินดีต้อนรับ

ฟังก์ชันแบบอะซิงโครนัสเพิ่มความซับซ้อนให้การจัดการข้อผิดพลาด TypeScript ช่วยให้มั่นใจว่าคุณจัดการการปฏิเสธของ Promise ได้อย่างถูกต้อง

Try-Catch กับ Async/Await

ครอบการเรียกใช้ await ด้วย try-catch เพื่อจัดการการปฏิเสธของ Promise
async function loadUser(id: number): Promise<User> {
  try {
    return await api.getUser(id);
  } catch (err: unknown) {
    if (err instanceof Error) throw new AppError(err.message);
    throw new AppError('Unknown error');
  }
}

ข้อผิดพลาดของ Promise.all

Promise.all จะถูกปฏิเสธเมื่อพบการปฏิเสธครั้งแรก ให้ครอบด้วย try-catch
try {
  const [user, posts] = await Promise.all([getUser(id), getPosts(id)]);
} catch (err) { /* one or both failed */ }

Promise.allSettled

allSettled จะส่งคืนทั้งผลสำเร็จและความล้มเหลวโดยไม่โยนข้อผิดพลาด
const results = await Promise.allSettled([getUser(1), getPosts(1)]);
results.forEach(r => {
  if (r.status === 'fulfilled') console.log(r.value);
  else console.error(r.reason);
});

ผลลัพธ์แบบอะซิงโครนัสที่มีชนิด

ผสานการทำงานแบบอะซิงโครนัสเข้ากับรูปแบบ Result เพื่อจัดการข้อผิดพลาดอย่างชัดเจน
async function safeGet<T>(fn: () => Promise<T>): Promise<Result<T>> {
  try { return { ok: true, value: await fn() }; }
  catch (e) { return { ok: false, error: e as Error }; }
}

การปฏิเสธที่ไม่ได้จัดการ

รับฟังการปฏิเสธที่ไม่ได้จัดการใน Node.js เพื่อป้องกันโปรแกรมหยุดทำงาน
process.on('unhandledRejection', (reason: unknown) => {
  console.error('Unhandled rejection:', reason);
  process.exit(1);
});

กำหนดเวลาหมดอายุด้วย Promise.race

ใช้ Promise.race เพื่อสร้างรูปแบบกำหนดเวลาหมดอายุที่มีชนิดกำกับ
function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
  const timeout = new Promise<never>((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms));
  return Promise.race([promise, timeout]);
}

รูปแบบการลองใหม่

ใช้การลองใหม่แบบอะซิงโครนัสที่มีชนิดกำกับ พร้อมข้อผิดพลาดที่มีชนิดกำกับ
async function retry<T>(fn: () => Promise<T>, times: number): Promise<T> {
  for (let i = 0; i < times; i++) {
    try { return await fn(); } catch (e) { if (i === times - 1) throw e; }
  }
  throw new Error('Unreachable');
}

การจัดการข้อผิดพลาดพร้อมกัน

จัดการข้อผิดพลาดเมื่อเรียกใช้การทำงานแบบอะซิงโครนัสพร้อมกัน
const [userResult, postsResult] = await Promise.allSettled([
  getUser(id).then(u => ({ ok: true, value: u })).catch(e => ({ ok: false, error: e })),
  getPosts(id).then(p => ({ ok: true, value: p })).catch(e => ({ ok: false, error: e })),
]);

การส่งต่อข้อผิดพลาดของ AsyncQueue

ข้อผิดพลาดในตัววนซ้ำแบบอะซิงโครนัสจะถูกส่งต่ออย่างถูกต้องเมื่อใช้ for-await
async function* generate() {
  yield await fetchA();
  yield await fetchB(); // error here stops the loop
}
for await (const item of generate()) { process(item); }

มิดเดิลแวร์ข้อผิดพลาดแบบมีชนิดใน Next.js

ใช้ขอบเขตข้อผิดพลาดแบบมีชนิดในการทำงานฝั่งเซิร์ฟเวอร์
'use server';
async function createUser(data: CreateUserDto): Promise<Result<User>> {
  return safeGet(() => db.user.create({ data }));
}

ตรวจสอบสั้น ๆ

หากคุณไม่ดักจับ Promise ที่ถูกปฏิเสธในฟังก์ชัน async/await จะเกิดอะไรขึ้น

สรุปทบทวน

การจัดการข้อผิดพลาดในโค้ด TypeScript แบบอะซิงโครนัส: คุณได้เรียนรู้แนวคิดสำคัญของหัวข้อนี้และวิธีนำไปใช้ในโปรเจกต์ TypeScript จริงแล้ว

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

บทเรียน “การจัดการข้อผิดพลาดในโค้ด TypeScript แบบอะซิงก์” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อผิดพลาดในโค้ด TypeScript แบบอะซิงก์”

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

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

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

บทเรียน “การจัดการข้อผิดพลาดในโค้ด TypeScript แบบอะซิงก์” ใช้เวลานานแค่ไหน

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

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

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

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

  1. คลาสข้อผิดพลาดและลำดับชั้นที่ระบุชนิด
  2. รูปแบบผลลัพธ์: Ok และ Err
  3. การทำข้อผิดพลาดที่ดักจับให้แคบลง (unknown กับ Error)
  4. การจัดการข้อผิดพลาดในโค้ด TypeScript แบบอะซิงก์
← กลับไปที่ TypeScript Academy