Σφάλμα Node.js με περιβάλλον

Πώς να προσθέσετε μια αιτία σφάλματος σε ρίψεις στο V8 9.3 και μεταγενέστερη

Περισσότερο πλαίσιο για σφάλματα

Ξεκινώντας με την έκδοση 9.3 του V8 Javascript engine, οι προγραμματιστές θα έχουν την επιλογή να προσθέσουν έναν νέο τύπο πληροφοριών όταν ρίχνουν ένα προεπιλεγμένο σφάλμα. Αντί να παρέχετε ένα μόνο όρισμα, θα μπορείτε να προσθέσετε ένα είδος τύπου σφάλματος, που ονομάζεται επίσης αιτία σφάλματος, έτσι ώστε ένας χειριστής για τη σύλληψη τέτοιων σφαλμάτων να μπορεί να προσδιορίσει καλύτερα από πού προήλθε το σφάλμα.

Για να είμαστε πιο ακριβείς, ο κατασκευαστής σφαλμάτων δέχεται μια δεύτερη προαιρετική παράμετρο, η οποία αποτελεί αντικείμενο επιλογών, όπου μπορεί να χρησιμοποιηθεί η ιδιότητα «αιτία».

Ας ρίξουμε μια ματιά σε ένα παράδειγμα.

/**
 * 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, θα ενημερώσω αυτό το άρθρο ανάλογα.

Προτάσεις

Σχετικά

Προσάρτημα

Γλώσσες