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), หรือใช้ไลบรารีและเฟรมเวิร์กที่นำเสนอวิธีที่มีความหรูหรามากขึ้น

ดูเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการจัดการข้อผิดพลาด: