Maison > interface Web > js tutoriel > Un joyau caché dans le débogage JavaScript : error.cause

Un joyau caché dans le débogage JavaScript : error.cause

DDD
Libérer: 2025-01-12 16:45:47
original
688 Les gens l'ont consulté

A Hidden Gem in JavaScript Debugging: error.cause

Les défis du débogage

Quel est le plus grand défi du débogage ? L’un d’eux consiste sans aucun doute à rechercher la source des erreurs.

Imaginez ce scénario :

const func = () => {
  doSth('A');
  doSth('B');
};
Copier après la connexion
Copier après la connexion

Lorsque func renvoie une erreur, comment identifier à quelle étape l'erreur s'est produite ? Était-ce causé par doSth('A'), doSth('B') ou func lui-même ? De toute évidence, l'erreur manque de contexte suffisant.

Solutions communes

Une approche courante pour résoudre ce problème pourrait ressembler à ceci :

const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', error);
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', error);
  }
};
Copier après la connexion
Copier après la connexion

Avec cette approche, vous pouvez localiser plus facilement la source de l'erreur. Cette solution présente cependant plusieurs limites :

  1. Perte des détails de l'erreur :

    Si l'erreur contient des informations détaillées (par exemple, charges utiles, codes d'état HTTP, codes d'erreur), cette approche ajoute uniquement le message d'erreur de doSth à l'erreur nouvellement construite. D'autres détails cruciaux, y compris la trace originale de la pile, sont perdus.

  2. Diminution de la lisibilité du journal :

    Avec plus de deux points d'erreur potentiels, les journaux peuvent devenir encombrés et difficiles à interpréter.

  3. Ambiguïté dans l'expression de l'intention :

    Le code ne communique pas explicitement que la nouvelle erreur est causée par l'interception de la fonction doSth spécifique, ce qui laisse place à une meilleure lisibilité du code.

Présentation d'erreur.cause

Pour résoudre ces problèmes, ECMAScript 2022 a introduit error.cause.

Cette fonctionnalité permet aux développeurs de spécifier la cause première d'une erreur lors de la création d'un nouvel objet d'erreur. En utilisant error.cause, vous pouvez établir une chaîne d'erreurs, ce qui facilite le débogage et la recherche de la cause première d'un problème.

Voici un exemple simple :

try {
  // Some operation that may throw an error
} catch (error) {
  throw new Error('Something went wrong', { cause: error });
}
Copier après la connexion

Avec cette approche, vous pouvez établir des liens de causalité entre les erreurs. Par exemple :

const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', { cause: error });
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', { cause: error });
  }
};
Copier après la connexion

Cela nous permet de détecter les erreurs générées par les fonctions de niveau inférieur (par exemple, doSth('A')), de générer une nouvelle erreur qui ajoute un contexte pertinent (par exemple, "Une erreur s'est produite lors de l'exécution de doSth('A')" ) et conservez les détails de l'erreur d'origine (par exemple, "A est un argument illégal.").

Construire une chaîne d'erreurs

Un autre avantage de error.cause est sa capacité à créer une chaîne d'erreurs liées, permettant aux développeurs de retracer les problèmes à travers plusieurs couches de l'application :

const func = () => {
  try {
    try {
      try {
        doSth('A');
      } catch (error) {
        throw new Error('Error at depth 3', { cause: error });
      }
    } catch (error) {
      throw new Error('Error at depth 2', { cause: error });
    }
  } catch (error) {
    throw new Error('Error at depth 1', { cause: error });
  }
};

console.log(error.cause.cause); // Error at depth 3
Copier après la connexion

Dans Node.js, les erreurs avec une cause sont gérées spécialement dans la console. Toutes les piles d'erreurs associées sont imprimées :

const func = () => {
  doSth('A');
  doSth('B');
};
Copier après la connexion
Copier après la connexion

Conclusion

  • Le débogage devient beaucoup plus facile lorsque vous avez un accès immédiat au contexte et aux détails de l'erreur.
  • Un moyen efficace d'y parvenir consiste à adopter un modèle "catch rethrow with context" en utilisant la fonctionnalité error.cause :
const func = () => {
  try {
    doSth('A');
  } catch (error) {
    throw new Error('An error from A', error);
  }
  try {
    doSth('B');
  } catch (error) {
    throw new Error('An error from B', error);
  }
};
Copier après la connexion
Copier après la connexion

Cette approche améliore non seulement la traçabilité des erreurs, mais améliore également la lisibilité et la maintenabilité de votre code.


Nous sommes Leapcell, votre premier choix pour déployer des projets Node.js sur le cloud.

A Hidden Gem in JavaScript Debugging: error.cause

Leapcell est la plate-forme sans serveur de nouvelle génération pour l'hébergement Web, les tâches asynchrones et Redis :

Support multilingue

  • Développer avec Node.js, Python, Go ou Rust.

Déployez un nombre illimité de projets gratuitement

  • payez uniquement pour l'utilisation – aucune demande, aucun frais.

Une rentabilité imbattable

  • Payez à l'utilisation sans frais d'inactivité.
  • Exemple : 25 $ prend en charge 6,94 millions de requêtes avec un temps de réponse moyen de 60 ms.

Expérience de développeur simplifiée

  • Interface utilisateur intuitive pour une configuration sans effort.
  • Pipelines CI/CD entièrement automatisés et intégration GitOps.
  • Mesures et journalisation en temps réel pour des informations exploitables.

Évolutivité sans effort et hautes performances

  • Mise à l'échelle automatique pour gérer facilement une concurrence élevée.
  • Zéro frais opérationnels – concentrez-vous uniquement sur la construction.

Explorez-en davantage dans la documentation !

A Hidden Gem in JavaScript Debugging: error.cause

Suivez-nous sur X : @LeapcellHQ


À lire sur notre blog

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal