Node.js-Fehler mit Kontext

So fügen Sie in V8 9.3 und höher eine Fehlerursache zu Würfen hinzu

Mehr Kontext für Fehler

Ab Version 9.3 der V8-JavaScript-Engine haben Entwickler die Möglichkeit, beim Auslösen eines Standardfehlers einen neuen Informationstyp hinzuzufügen. Anstatt ein einzelnes Argument bereitzustellen, können Sie eine Art Fehlertyp, auch Fehlerursache genannt, hinzufügen, damit ein Handler zum Abfangen solcher Fehler besser feststellen kann, woher der Fehler stammt.

Genauer gesagt akzeptiert der Error-Konstruktor einen zweiten optionalen Parameter, der ein Objekt von Optionen ist, bei dem die Eigenschaft „cause“ verwendet werden kann.

Schauen wir uns ein Beispiel an.

/**
 * 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;
    }
  }
}

Vorteil von Fehlerursachen

Der klare Vorteil der Verwendung von Fehlerursachen besteht darin, dass Sie keine benutzerdefinierte Error-Klasse definieren müssen, um ähnliche Fälle in Ihrem Code zu behandeln. Auf der anderen Seite funktioniert ein Standardmechanismus für Fehlerursachen auch gut mit Debugging-Tools.

Verfügbar mit V8-Version 9.3 und höher

Zum Zeitpunkt des Schreibens ist diese Änderung noch nicht für die öffentliche Nutzung verfügbar, da die aktuelle neueste Node.js-Version 16.4.2 die neueste stabile Version von V8 verwendet, die 9.1 ist. Wenn Node.js Version 9.3 verwendet, werde ich diesen Artikel entsprechend aktualisieren.