Maison > interface Web > js tutoriel > Comment gérer les erreurs dans le code JavaScript asynchrone en utilisant le rejet Try / Catch et promettre?

Comment gérer les erreurs dans le code JavaScript asynchrone en utilisant le rejet Try / Catch et promettre?

Johnathan Smith
Libérer: 2025-03-12 16:37:17
original
151 Les gens l'ont consulté

Gestion des erreurs en javascript asynchrone avec essai / capture et promesse de rejet

La gestion des erreurs dans JavaScript asynchrone nécessite une approche nuancée, différente du code synchrone. Le bloc try...catch les gère les erreurs synchrones, mais les opérations asynchrones, utilisant souvent des promesses ou asynchrones / attend, nécessitent une stratégie différente. Promis Utilisez .then() et .catch() Méthodes de gestion des erreurs. Si une opération asynchrone échoue, elle rejette la promesse et le bloc .catch() gère l'erreur. Le bloc try...catch Block ne capture que les erreurs qui se produisent avant que la promesse ne résout ou rejette.

Illustrons:

 <code class="javascript">function asyncOperation() { return new Promise((resolve, reject) => { // Simulate an asynchronous operation that might fail setTimeout(() => { const randomNumber = Math.random(); if (randomNumber  console.log(result)) .catch(error => console.error("Caught an error:", error));</code>
Copier après la connexion

Dans cet exemple, la fonction asyncOperation renvoie une promesse. Si le nombre aléatoire est inférieur à 0,5, la promesse se résout avec "Success!"; Sinon, il rejette avec un objet d'erreur. Le bloc .catch() gère spécifiquement la promesse rejetée, empêchant les erreurs de rejet non gérées. Un bloc try...catch placé autour de l'appel asyncOperation() n'attraperait pas l'erreur car l'erreur est lancée après l'exécution du bloc try .

Meilleures pratiques pour la gestion des erreurs dans JavaScript asynchrone au-delà de l'essai / des captures et des promesses

Bien que try...catch and Promises soit fondamental, une gestion des erreurs asynchrones robuste nécessite d'autres meilleures pratiques:

  • Gestion des erreurs centralisées: au lieu de diffuser des blocs .catch() tout au long de votre code, envisagez un mécanisme central de gestion des erreurs. Cela pourrait impliquer une fonction de gestionnaire d'erreurs personnalisée ou une couche middleware (si vous utilisez un framework comme React ou Express) qui intercepte et enregistre toutes les erreurs non gérées. Cela améliore la maintenabilité et permet des rapports d'erreurs cohérents.
  • Types d'erreur spécifiques: ne vous contentez pas d'attraper des objets Error génériques. Créez des classes d'erreur personnalisées pour représenter des types d'erreur spécifiques dans votre application (par exemple, NetworkError , AuthenticationError , DatabaseError ). Cela permet une gestion des erreurs et un débogage plus ciblés.
  • Messages d'erreur détaillés: incluez des informations complètes dans vos messages d'erreur, tels que les horodatages, le contexte de l'utilisateur (le cas échéant) et les données pertinentes qui facilitent le débogage. Évitez les messages d'erreur vagues comme «quelque chose s'est mal passé».
  • Logotage: implémentez la journalisation robuste pour capturer les erreurs et leur contexte. Utilisez une bibliothèque forestière (par exemple, Winston, Bunyan) pour faciliter la journalisation structurée et une analyse plus facile. Incluez des traces de pile pour un débogage plus facile.
  • Messages d'erreur conviviaux: lors de la présentation d'erreurs à l'utilisateur, évitez d'afficher les détails techniques. Au lieu de cela, fournissez des messages clairs, concis et conviviaux qui expliquent le problème et suggèrent des solutions possibles.
  • Limites d'erreur (dans les cadres d'interface utilisateur): Si vous construisez une interface utilisateur, tirez parti des limites d'erreur (comme React de React ErrorBoundary ) pour gérer gracieusement les erreurs dans les composants sans écraser toute l'application.

Utilisation de l'async / Await avec des blocs d'essai / capture

Oui, vous pouvez utiliser efficacement async/await avec try...catch Blocks pour gérer les erreurs dans les fonctions JavaScript asynchrones. async/await rend le code asynchrone et se comporte un peu plus de code synchrone, ce qui rend la gestion des erreurs plus intuitive. Le bloc try...catch attrapera toutes les erreurs lancées dans la fonction async .

 <code class="javascript">async function asyncOperationWithAwait() { try { const result = await asyncOperation(); // asyncOperation from previous example console.log(result); } catch (error) { console.error("Caught an error using async/await:", error); } } asyncOperationWithAwait();</code>
Copier après la connexion

Dans cet exemple, le bloc try tente d'exécuter l' asyncOperation . Si asyncOperation rejette, le bloc catch gérera l'erreur. Cette approche est plus propre et plus facile à lire que d'utiliser .then() et .catch() .

Débogage des erreurs de lancement de code javascript asynchrones

Le débogage du code asynchrone peut être difficile car les erreurs peuvent ne pas se produire immédiatement ou dans une séquence prévisible. Voici quelques stratégies de débogage efficaces:

  • Console Logging: Placez stratégiquement console.log() dans tout votre code asynchrone pour suivre le flux d'exécution et les valeurs des variables. Log les données pertinentes avant et après les opérations asynchrones.
  • Debuggers: utilisez les outils de développeur de votre navigateur (ou un débogueur Node.js) pour parcourir votre code par ligne. Définissez les points d'arrêt avant et après les opérations asynchrones pour inspecter les variables et identifier la source des erreurs.
  • Outils de surveillance des erreurs: Pour les applications de production, utilisez des outils de surveillance des erreurs (par exemple, Sentry, Rollbar) qui capturent automatiquement les exceptions non perdues, fournissent des traces de pile détaillées et offrent des informations sur la fréquence des erreurs et les modèles.
  • Inspection de la promesse: si vous utilisez des promesses, inspectez l'objet prometteur rejeté pour obtenir des informations sur l'erreur, comme la trace de pile.
  • Logue asynchrone: assurez-vous que vos instructions de journalisation sont manipulées de manière asynchrone pour éviter le blocage du fil principal et les erreurs potentiellement masquées.
  • Simplifiez le code: si vous avez du mal à déboguer le code asynchrone complexe, essayez de le simplifier en le décomposant en fonctions plus petites et plus gérables. Cela facilite l'isolat de la source de l'erreur.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal