JavaScript:
טיפול בשגיאות
איך לעשות:
הנה בלוק ה-try-catch
הקלאסי:
try {
// קוד שעלול לזרוק שגיאה
let result = potentiallyRiskyOperation();
console.log('הצלחה:', result);
} catch (error) {
// מה לעשות אם נזרקת שגיאה
console.error('אופס:', error.message);
}
פלט לדוגמא כאשר לא מתרחשת שגיאה:
הצלחה: 42
וכאשר יש שגיאה:
אופס: משהו השתבש
עבור קוד אסינכרוני, שבו מעורבים promises, השתמשו ב-try-catch
בפונקציה async
:
async function fetchData() {
try {
let data = await fetch('https://api.example.com/data');
console.log('נתונים נאספו:', data);
} catch (error) {
console.error('שגיאה באיסוף נתונים:', error.message);
}
}
fetchData();
צלילה עמוקה
טיפול בשגיאות ב-JavaScript התפתח. בעבר (ES3, בערך 1999), היינו כוללים רק את בלוק ה-try-catch
. לא ממש גמיש, אבל עשה את העבודה.
ES6 (2015) הציג Promises ונתן לנו את השיטות .then()
ו-.catch()
, שמאפשרים לנו לטפל בשגיאות אסינכרוניות בצורה חלקה יותר.
fetch('https://api.example.com/data')
.then(data => console.log('נתונים נאספו:', data))
.catch(error => console.error('שגיאה באיסוף נתונים:', error.message));
לגבי פרטי המימוש, כאשר שגיאה נזרקת, מנועי JavaScript יוצרים אובייקט של Error
עם מאפיינים שימושיים כמו message
ו-stack
. אפשר גם ליצור סוגי שגיאה מותאמים אישית על ידי הרחבת המחלקה Error
– נוח לאפליקציות מורכבות יותר.
אלטרנטיבות? תוכלו להתעלם מטיפול בשגיאות (רעיון רע), להשתמש ב-callbacks עם פרמטרים של שגיאה-ראשונה (שלום, סגנון Node.js), או להשיג יופי עם ספריות ומסגרות שמציעות את הגישות שלהן.
ראה גם
למידע נוסף על טיפול בשגיאות:
- MDN על try-catch: MDN try…catch
- Async/Await: MDN async function
- מדריך ל-Promises: MDN Promises
- יצירה וזריקה של שגיאות מותאמות אישית: MDN Error