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

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

ใช้ try/catch ร่วมกับ await อย่างปลอดภัย

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

Future อาจล้มเหลวได้

งานแบบ async อาจเกิดข้อผิดพลาดได้ เช่น เซิร์ฟเวอร์หมดเวลา หรือไม่พบไฟล์ Future จึงอาจเสร็จสิ้นพร้อมข้อผิดพลาดแทนที่จะเป็นค่า

try และ catch กับ await

ครอบ await ด้วย try/catch แล้ว Future ที่ล้มเหลวจะโยนข้อผิดพลาดตรงบรรทัดนั้น เช่นเดียวกับข้อผิดพลาดทั่วไปในการทำงานแบบ sync

try {
  final data = await fetch();
} catch (e) {
  print("failed: $e");
}

ดักจับชนิดข้อมูลเฉพาะ

ใช้ประโยค on เพื่อจัดการข้อผิดพลาดชนิดหนึ่งอย่างเจาะจง โดยปล่อยให้ความล้มเหลวชนิดอื่นส่งต่อขึ้นไปตามเดิม

try {
  await load();
} on TimeoutException {
  print("too slow");
}

ตรวจสอบข้อผิดพลาด

เพิ่ม catch (e, s) เพื่อรับทั้งออบเจ็กต์ข้อผิดพลาดและสแต็กเทรซ ทำให้การแก้ไขข้อผิดพลาดแบบ async ทำได้ง่ายขึ้นมาก

catch (e, s) {
  print(e);
  print(s);
}

finally ทำงานเสมอ

บล็อก finally จะทำงานไม่ว่า await จะสำเร็จหรือโยนข้อผิดพลาด จึงเหมาะสำหรับปิดไฟล์หรือหยุดตัวแสดงการโหลด

try {
  await save();
} finally {
  closeFile();
}

การโยนข้อผิดพลาดจาก async

ใช้ throw ภายในฟังก์ชันแบบ async แล้ว Future ที่คืนมาจะเสร็จสิ้นพร้อมข้อผิดพลาดนั้น เพื่อให้ผู้เรียกสามารถดักจับได้

Future<int> risky() async {
  throw StateError("nope");
}

ข้อผิดพลาดในสายงาน then

หากไม่ใช้ await ให้ผูก catchError เข้ากับ Future เพื่อจัดการความล้มเหลวในสายงานรูปแบบ then

fetch().then(use).catchError(handle);

กู้คืนด้วยค่าเริ่มต้น

ใน catchError หรือ catch คุณสามารถคืนค่า fallback เพื่อให้โปรแกรมทำงานต่อได้อย่างราบรื่นหลังเกิดความล้มเหลว

ข้อผิดพลาดของ Future ที่ไม่ได้จัดการ

Future ที่ล้มเหลวและถูกเพิกเฉยจะกลายเป็นข้อผิดพลาดที่ไม่ได้ดักจับ ซึ่งอาจทำให้แอปหยุดทำงานหรือบันทึกข้อผิดพลาดอย่างรุนแรง ควรดักจับหรือ await Future ของคุณเสมอ

โยนข้อผิดพลาดซ้ำเมื่อจำเป็น

ใช้ rethrow ภายใน catch เพื่อบันทึกความล้มเหลวไว้ที่นี่ พร้อมปล่อยให้ตัวจัดการภายนอกจัดการข้อผิดพลาดนั้นต่อได้

catch (e) {
  log(e);
  rethrow;
}

ใช้ await ภายใน finally

คุณยังสามารถใช้ await ภายใน finally เพื่อทำความสะอาดแบบ async เช่น ระบายข้อมูลในบัฟเฟอร์ก่อนที่ฟังก์ชันจะคืนค่า

ตรวจสอบความเข้าใจ

ตรวจสอบความเข้าใจอย่างรวดเร็วเกี่ยวกับการดักจับข้อผิดพลาดแบบ async

ทบทวน: ข้อผิดพลาดแบบ Async

คุณได้เรียนรู้การป้องกัน await ด้วย try/catch การระบุชนิดข้อมูลด้วย on การทำความสะอาดใน finally และการกู้คืนหรือโยนข้อผิดพลาดซ้ำ 🛡️

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

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

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

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

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

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

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

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

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

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

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

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

  1. ลูปเหตุการณ์และไมโครทาสก์
  2. สร้างและรอค่า Future
  3. การจัดการข้อผิดพลาดในโค้ดอะซิงโครนัส
  4. Future.wait และงานแบบขนาน
← กลับไปที่ Dart Academy