การจัดการข้อผิดพลาดในโค้ดอะซิงโครนัส
ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ลูปเหตุการณ์และไมโครทาสก์
- สร้างและรอค่า Future
- การจัดการข้อผิดพลาดในโค้ดอะซิงโครนัส
- Future.wait และงานแบบขนาน