วันนี้ทำการแก้ไข code ที่พัฒนาด้วยภาษา Dart
ก็ไปเจอรูปแบบการจัดการ exception/error หลายรูปแบบ
ที่ทำงานกับ async function
จึงลองทำการสรุปไว้นิดหน่อย
พื้นฐานเล็กน้อยสำหรับ Dart
โดยที่ Dart จะแยก Error กับ Exception ออกจากกัน
Error นั้นจะใช้สำหรับปัญหาในระดับ system เช่น memory error เป็นต้น
แน่นอนว่าเราไม่สามารถคาดเดาได้เลย
ส่วน Exception นั้นใช้สำหรับระดับ application
เพิ่มเติมคือ รายละเอียดของปัญหาต่าง ๆ มาด้วย
ซึ่งทำให้สามารถดักจับได้ง่าย
รวมทั้งแก้ไขได้ง่ายขึ้น
แน่นอนว่าเรารู้ว่า น่าจะมีปัญหาอะไรเกิดขึ้นมาบ้าง
โดยการใช้งานทั้งคู่ ควรที่จะสร้าง custom error/exception ขึ้นมาใช้
จะดีกว่าการใช้งานตรง ๆ ไปเลย
รูปแบบที่น่าสนใจประกอบไปด้วย
- try-catch-finally ปกติ + async-await
- catchError()
- onError ในการเรียกพวก async generator
- ใช้งาน Zone class มาช่วย
มาดูตัวอย่าง code ในแต่ละรูปแบบกัน
แบบที่ 1 try-catch-finally ปกติ + async-await
[gist id="07e05a7ed212eee368d352906a1b95a3" file="1.dart"]แบบที่ 2 catchError()
[gist id="07e05a7ed212eee368d352906a1b95a3" file="2.dart"]แบบที่ 3 onError ในการเรียกพวก async generator
[gist id="07e05a7ed212eee368d352906a1b95a3" file="3.dart"]แบบที่ 4 ใช้งาน Zone class มาช่วย
[gist id="07e05a7ed212eee368d352906a1b95a3" file="4.dart"]ปล. Exception ทุกอย่างของ Dart นั้นจะเป็น unchecked exception ทั้งหมด
ดูเพิ่มเติมได้ที่