שגיאת Node.js עם הקשר

כיצד להוסיף שגיאת סיבה לזריקות ב- V8 9.3 ואילך

הקשר נוסף לטעויות

החל מגרסת 9.3 של מנוע ה- Javascript V8, למפתחים תהיה אפשרות להוסיף סוג חדש של מידע כאשר הם משליכים שגיאת ברירת מחדל. במקום לספק טיעון יחיד, תוכל להוסיף סוג של סוג שגיאה, הנקרא גם גורם שגיאה, כך שמטפל לתפוס שגיאות כאלה יוכל לקבוע טוב יותר מאיפה מקור השגיאה.

ליתר דיוק, בונה השגיאות מקבל פרמטר אופציונלי שני, שהוא אובייקט של אפשרויות, שבו ניתן להשתמש במאפיין "סיבה".

בואו נסתכל על דוגמא.

/**
 * A simple demonstration how
 * the syntax will benefit from
 * the error-cause option in
 * new Errors.
 * 
 * Note that the example is greatly
 * simplified to focus on the 
 * relevant changes.
 */
async function processImage(props) {
  try {
    await minifyImage(props);
  } catch (err) {
    throw new Error('image-minification', { cause: err });
  }
  try {
    await uploadImage(props);
  } catch (err) {
    throw new Error('image-upload', { cause: err });
  }
  try {
    await cleanUpCache(props);
    await notifyUser(props);
  } catch (err) {
    throw new Error('post-processing', { cause: err });
  }
}

//
// ... later in our code ...
//

async function selectAndUploadImage(props){
  try {
    await processImage(props);
  } catch (err) {
    console.error(err.cause);
    
    switch(err) {
      case 'image-minification':
        // handle the minification error,
        // which is available by accessing
        // 'err.cause'.
        break;
      case 'image-upload':
        // ...
        break;
      case 'post-processing':
        // ...
        break;
    }
  }
}

יתרון של גורמי שגיאה

היתרון הברור בשימוש בסיבות שגיאה הוא בכך שאינך צריך להגדיר מחלקת שגיאה מותאמת אישית לטיפול במקרים דומים בקוד שלך. מצד שני, בעל מנגנון סטנדרטי לגורמים לשגיאות יעבוד יפה גם עם כלי ניפוי באגים.

זמין עם V8 גרסה 9.3 ואילך

נכון לכתיבת שורות אלה, שינוי זה עדיין אינו זמין לשימוש ציבורי, שכן גרסת Node.js האחרונה 16.4.2 משתמשת בגרסה היציבה האחרונה של V8, שהיא 9.1. כאשר Node.js יתחיל להשתמש בגרסה 9.3, אעדכן מאמר זה בהתאם.