JavaScript:
การจัดการกับข้อผิดพลาด
วิธีการ:
นี่คือบล็อก try-catch
แบบคลาสสิก:
try {
// รหัสที่อาจทำให้เกิดข้อผิดพลาด
let result = potentiallyRiskyOperation();
console.log('Success:', result);
} catch (error) {
// สิ่งที่ควรทำหากมีการโยนข้อผิดพลาด
console.error('Oops:', error.message);
}
ผลลัพธ์ตัวอย่างเมื่อไม่มีข้อผิดพลาดเกิดขึ้น:
Success: 42
และเมื่อมีข้อผิดพลาด:
Oops: Something went wrong
สำหรับรหัสแบบอะซิงโครนัส ที่เกี่ยวข้องกับโพรมิส ใช้ try-catch
ในฟังก์ชัน async
:
async function fetchData() {
try {
let data = await fetch('https://api.example.com/data');
console.log('Data fetched:', data);
} catch (error) {
console.error('Error fetching data:', error.message);
}
}
fetchData();
พิจารณาลึกซึ้ง
การจัดการข้อผิดพลาดใน JavaScript ได้พัฒนาต่อมา ย้อนกลับไปในวันนั้น (ES3, ประมาณ 1999), เรามีเพียงบล็อก try-catch
ไม่ยืดหยุ่นมากนัก แต่ก็ทำหน้าที่ได้ดี
ES6 (2015) ได้นำเสนอ Promises และให้เรา .then()
และ .catch()
, ช่วยให้เราสามารถจัดการกับข้อผิดพลาดแบบอะซิงโครนัสได้อย่างมีมารยาทมากขึ้น
fetch('https://api.example.com/data')
.then(data => console.log('Data fetched:', data))
.catch(error => console.error('Error fetching data:', error.message));
สำหรับรายละเอียดการนำไปใช้งาน หากมีข้อผิดพลาดถูกโยน, เอ็นจิน JavaScript จะสร้างขอบเขตการโยนข้อผิดพลาด Error
ที่มีคุณสมบัติที่มีประโยชน์อย่างเช่น message
และ stack
คุณยังสามารถสร้างประเภทข้อผิดพลาดที่กำหนดเองได้ โดยการขยายคลาส Error
– สะดวกสำหรับแอปที่ซับซ้อนขึ้น
ทางเลือกอื่น? คุณอาจเลือกที่จะไม่ใส่ใจการจัดการข้อผิดพลาด (ไม่ใช่ความคิดที่ดี), ใช้คอลแบ็คที่มีพารามิเตอร์ซึ่งข้อผิดพลาดมาก่อน (สวัสดี, สไตล์ Node.js), หรือใช้ไลบรารีและเฟรมเวิร์กที่นำเสนอวิธีที่มีความหรูหรามากขึ้น
ดูเพิ่มเติม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดการข้อผิดพลาด:
- MDN เกี่ยวกับ try-catch: MDN try…catch
- Async/Await: MDN async function
- คู่มือสำหรับ Promises: MDN Promises
- การสร้างและโยนข้อผิดพลาดที่กำหนดเอง: MDN Error