Comment gérer les exceptions JavaScript
Les programmeurs rencontreront certainement des erreurs lors de l'écriture de programmes. Cet article est basé sur le concept de gestion des erreurs en JavaScript. J'espère que cela vous aidera lorsque vous écrirez des programmes JavaScript.
Démo
La démo que nous utilisons peut être téléchargée depuis GitHub Lorsque le programme est exécuté, la page suivante apparaîtra :
.
Tous les boutons déclencheront des erreurs et lanceront TypeError. Voici la définition de ce module :
// scripts/error.jsfunction error() {var foo = {};return foo.bar();}
Un objet vide foo est défini dans error(), donc appeler foo.bar() provoquera est défini et une erreur est signalée. Nous utilisons des tests unitaires pour vérifier :
// tests/scripts/errorTest.jsit('throws a TypeError', function () {should.throws(error, TypeError);});
Nous utilisons Mocha avec Should.js pour les tests unitaires.
Après avoir cloné la base de code et installé les packages de dépendances, vous pouvez utiliser npm t pour exécuter des tests. Bien sûr, vous pouvez également exécuter un fichier de test, tel que : ./node_modules/mocha/bin/mocha tests/scripts/errorTest.js
Croyez-moi, pour un langage dynamique comme JavaScript, peu importe qui c'est facile de rencontrer des erreurs comme celle-ci.
Méthode de manipulation incorrecte
J'ai résumé la fonction de traitement des événements correspondant au bouton un peu plus simple, comme suit :
// scripts/badHandler.jsfunction badHandler(fn) {try {return fn();} catch (e) { }return null;}
badHandler reçoit un fn As une fonction de rappel, la fonction de rappel est appelée dans badHandler. Nous écrivons le test unitaire correspondant :
// tests/scripts/badHandlerTest.jsit('returns a value without errors', function() {var fn = function() {return 1;};var result = badHandler(fn);result.should.equal(1);});it('returns a null with errors', function() {var fn = function() {throw new Error('random error');};var result = badHandler(fn);should(result).equal(null);});
Vous constaterez que si une exception se produit, badHandler renvoie simplement null. Si vous faites correspondre le code complet, vous trouverez le problème :
// scripts/badHandlerDom.js(function (handler, bomb) {var badButton = document.getElementById('bad'); if (badButton) {badButton.addEventListener('click', function () {handler(bomb);console.log('Imagine, getting promoted for hiding mistakes');}); }}(badHandler, error));
Si vous essayez de l'attraper lorsqu'une erreur se produit, puis que vous renvoyez simplement null, je ne trouve pas ce qui n'a pas fonctionné du tout. Cette stratégie silencieuse peut entraîner une confusion dans l'interface utilisateur et dans les données, et vous pouvez passer plusieurs heures à déboguer mais ignorer le code dans try-catch, qui est la source du désastre. Si le code est si complexe qu’il comporte plusieurs niveaux d’appels, il sera presque impossible de trouver ce qui n’a pas fonctionné. Par conséquent, nous ne recommandons pas d’utiliser la stratégie de défaillance silencieuse, nous avons besoin d’une approche plus élégante.
Pas mal mais mauvaise manière
// scripts/uglyHandler.jsfunction uglyHandler(fn) {try {return fn();} catch (e) {throw new Error('a new error');}}
La façon dont il gère les erreurs est d'attraper l'erreur e, puis de générer une nouvelle erreur. C’est en effet mieux que la stratégie précédente d’échec silencieux. Si quelque chose ne va pas, je peux revenir en arrière couche par couche jusqu'à ce que je trouve l'erreur e qui a été initialement générée. Le simple fait de lancer une erreur (« une nouvelle erreur ») contient des informations limitées et n'est pas précis. Nous personnalisons l'objet d'erreur et envoyons plus d'informations :
// scripts/specifiedError.js// Create a custom errorvar SpecifiedError = function SpecifiedError(message) {this.name = 'SpecifiedError';this.message = message || '';this.stack = (new Error()).stack;}; SpecifiedError.prototype = new Error();SpecifiedError.prototype.constructor = SpecifiedError; 、// scripts/uglyHandlerImproved.jsfunction uglyHandlerImproved(fn) {try {return fn();} catch (e) {throw new SpecifiedError(e.message);}}// tests/scripts/uglyHandlerImprovedTest.jsit('returns a specified error with errors', function () {var fn = function () {throw new TypeError('type error');};should.throws(function () {uglyHandlerImproved(fn);}, SpecifiedError);});
Cette personnalisation. L'objet d'erreur contient désormais les informations d'erreur d'origine et devient donc plus utile. Mais comme il a été lancé à nouveau, il s’agissait toujours d’une erreur non gérée.
Intercepter les exceptions
Une idée est d'entourer toutes les fonctions avec try...catch :
function main(bomb) {try {bomb();} catch (e) {// Handle all the error things}}
Cependant, un tel code deviendra très volumineux, illisible et inefficace. Vous en souvenez-vous encore ? Au début de cet article, nous avons mentionné qu'une exception en JavaScript n'est qu'un événement. Heureusement, il existe une méthode globale de gestion des événements d'exception (onerror).
// scripts/errorHandlerDom.jswindow.addEventListener('error', function (e) {var error = e.error;console.log(error);});
Obtenir des informations sur la pile
Vous pouvez envoyer des informations d'erreur au serveur :
// scripts/errorAjaxHandlerDom.jswindow.addEventListener('error', function (e) {var stack = e.error.stack;var message = e.error.toString();if (stack) {message += '\n' + stack;} var xhr = new XMLHttpRequest();xhr.open('POST', '/log', true);// Fire an Ajax request with error detailsxhr.send(message);});
Afin d'obtenir des informations d'erreur plus détaillées et d'enregistrer dans Pour éviter les problèmes de traitement des données, vous pouvez également utiliser le plug-in de surveillance JavaScript de fundebug pour accéder rapidement au service de surveillance des bogues en trois minutes.
Voici le message d'erreur reçu par le serveur :
Si votre script est placé sous un autre nom de domaine, si vous n'activez pas CORS, sauf pour Erreur de script., vous ne verrez aucune information d’erreur utile. Si vous souhaitez connaître la solution spécifique, veuillez vous référer à : Erreur de script.
Gestion des erreurs asynchrones
Étant donné que setTimeout est exécuté de manière asynchrone, l'exception de code suivante ne sera pas interceptée par try...catch :
// scripts/asyncHandler.jsfunction asyncHandler(fn) {try {// This rips the potential bomb from the current contextsetTimeout(function () {fn();}, 1);} catch (e) { }}
L'instruction try...catch ne capturera que les exceptions dans l'environnement d'exécution actuel. Mais lorsque l'exception ci-dessus est levée, l'interpréteur JavaScript n'est plus en try...catch, il ne peut donc pas être intercepté. Il en va de même pour toutes les requêtes Ajax.
Nous pouvons apporter une légère amélioration et écrire try...attraper le rappel de la fonction asynchrone :
setTimeout(function () {try {fn();} catch (e) {// Handle this async error}}, 1);
Cependant, une telle routine En conséquence, le projet est plein de try...catch et le code est très concis. De plus, le moteur V8 qui exécute JavaScript décourage l'utilisation des fonctions try...catch in. Heureusement, nous n'avons pas besoin de faire cela, la gestion globale des erreurs détectera ces erreurs.
Conclusion
Mon conseil est de ne pas cacher vos erreurs, d’être assez courageux pour les rejeter. Personne ne devrait avoir honte car un bug dans le code provoque le crash du programme. Nous pouvons interrompre le programme et laisser l'utilisateur recommencer. Les erreurs sont inévitables, ce qui compte, c'est la façon dont vous les gérez.
Le contenu ci-dessus explique comment gérer les erreurs JavaScript. Si vous le trouvez utile, veuillez l'enregistrer rapidement.
Recommandations associées :
Erreur de base de données MySQL : solution de trop de connexions
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Tomato Novel est un logiciel de lecture de romans très populaire. Nous avons souvent de nouveaux romans et bandes dessinées à lire dans Tomato Novel. De nombreux amis souhaitent également gagner de l'argent de poche et éditer le contenu de leur roman. Je veux écrire dans du texte. Alors, comment pouvons-nous y écrire le roman ? Mes amis ne le savent pas, alors allons ensemble sur ce site. Prenons le temps de regarder une introduction à la façon d'écrire un roman. Partagez le didacticiel du roman Tomato sur la façon d'écrire un roman. 1. Ouvrez d'abord l'application de roman gratuite Tomato sur votre téléphone mobile et cliquez sur Personal Center - Writer Center 2. Accédez à la page Tomato Writer Assistant - cliquez sur Créer un nouveau livre. à la fin du roman.

Les cartes mères colorées jouissent d'une grande popularité et d'une part de marché élevée sur le marché intérieur chinois, mais certains utilisateurs de cartes mères colorées ne savent toujours pas comment accéder au BIOS pour les paramètres ? En réponse à cette situation, l'éditeur vous a spécialement proposé deux méthodes pour accéder au bios coloré de la carte mère. Venez l'essayer ! Méthode 1 : utilisez la touche de raccourci de démarrage du disque U pour accéder directement au système d'installation du disque U. La touche de raccourci de la carte mère Colorful pour démarrer le disque U en un seul clic est ESC ou F11. Tout d'abord, utilisez Black Shark Installation Master pour créer un Black. Disque de démarrage Shark U, puis allumez l'ordinateur lorsque vous voyez l'écran de démarrage, appuyez continuellement sur la touche ESC ou F11 du clavier pour accéder à une fenêtre de sélection de la séquence d'éléments de démarrage. Déplacez le curseur à l'endroit où "USB. " s'affiche, puis

Malheureusement, les gens suppriment souvent certains contacts accidentellement pour certaines raisons. WeChat est un logiciel social largement utilisé. Pour aider les utilisateurs à résoudre ce problème, cet article explique comment récupérer les contacts supprimés de manière simple. 1. Comprendre le mécanisme de suppression des contacts WeChat. Cela nous offre la possibilité de récupérer les contacts supprimés. Le mécanisme de suppression des contacts dans WeChat les supprime du carnet d'adresses, mais ne les supprime pas complètement. 2. Utilisez la fonction intégrée « Récupération du carnet de contacts » de WeChat. WeChat fournit une « Récupération du carnet de contacts » pour économiser du temps et de l'énergie. Les utilisateurs peuvent récupérer rapidement les contacts précédemment supprimés grâce à cette fonction. 3. Accédez à la page des paramètres WeChat et cliquez sur le coin inférieur droit, ouvrez l'application WeChat « Moi » et cliquez sur l'icône des paramètres dans le coin supérieur droit pour accéder à la page des paramètres.

Un résumé de la façon d'obtenir les droits d'administrateur Win11 Dans le système d'exploitation Windows 11, les droits d'administrateur sont l'une des autorisations très importantes qui permettent aux utilisateurs d'effectuer diverses opérations sur le système. Parfois, nous pouvons avoir besoin d'obtenir des droits d'administrateur pour effectuer certaines opérations, telles que l'installation de logiciels, la modification des paramètres du système, etc. Ce qui suit résume quelques méthodes pour obtenir les droits d'administrateur Win11, j'espère que cela pourra vous aider. 1. Utilisez les touches de raccourci. Dans le système Windows 11, vous pouvez ouvrir rapidement l'invite de commande via les touches de raccourci.

La définition de la taille de la police est devenue une exigence de personnalisation importante à mesure que les téléphones mobiles deviennent un outil important dans la vie quotidienne des gens. Afin de répondre aux besoins des différents utilisateurs, cet article présentera comment améliorer l'expérience d'utilisation du téléphone mobile et ajuster la taille de la police du téléphone mobile grâce à des opérations simples. Pourquoi avez-vous besoin d'ajuster la taille de la police de votre téléphone mobile - L'ajustement de la taille de la police peut rendre le texte plus clair et plus facile à lire - Adapté aux besoins de lecture des utilisateurs d'âges différents - Pratique pour les utilisateurs malvoyants qui souhaitent utiliser la taille de la police fonction de configuration du système de téléphonie mobile - Comment accéder à l'interface des paramètres du système - Dans Rechercher et entrez l'option "Affichage" dans l'interface des paramètres - recherchez l'option "Taille de la police" et ajustez-la. application - téléchargez et installez une application prenant en charge l'ajustement de la taille de la police - ouvrez l'application et entrez dans l'interface des paramètres appropriée - en fonction de l'individu

Les jeux mobiles font désormais partie intégrante de la vie des gens avec le développement de la technologie. Il a attiré l'attention de nombreux joueurs avec sa jolie image d'œuf de dragon et son processus d'éclosion intéressant, et l'un des jeux qui a beaucoup attiré l'attention est la version mobile de Dragon Egg. Pour aider les joueurs à mieux cultiver et faire grandir leurs propres dragons dans le jeu, cet article vous présentera comment faire éclore des œufs de dragon dans la version mobile. 1. Choisissez le type d'œuf de dragon approprié. Les joueurs doivent choisir soigneusement le type d'œuf de dragon qu'ils aiment et qui leur conviennent, en fonction des différents types d'attributs et de capacités d'œuf de dragon fournis dans le jeu. 2. Améliorez le niveau de la machine d'incubation. Les joueurs doivent améliorer le niveau de la machine d'incubation en accomplissant des tâches et en collectant des accessoires. Le niveau de la machine d'incubation détermine la vitesse d'éclosion et le taux de réussite de l'éclosion. 3. Collectez les ressources nécessaires à l'éclosion. Les joueurs doivent être dans le jeu.

Explication détaillée de la méthode de requête de version Oracle Oracle est l'un des systèmes de gestion de bases de données relationnelles les plus populaires au monde. Il offre des fonctions riches et des performances puissantes et est largement utilisé dans les entreprises. Dans le processus de gestion et de développement de bases de données, il est très important de comprendre la version de la base de données Oracle. Cet article présentera en détail comment interroger les informations de version de la base de données Oracle et donnera des exemples de code spécifiques. Interrogez la version de base de données de l'instruction SQL dans la base de données Oracle en exécutant une simple instruction SQL

Dans la société actuelle, les téléphones portables sont devenus un élément indispensable de nos vies. En tant qu'outil important pour notre communication, notre travail et notre vie quotidienne, WeChat est souvent utilisé. Cependant, il peut être nécessaire de séparer deux comptes WeChat lors du traitement de différentes transactions, ce qui nécessite que le téléphone mobile prenne en charge la connexion à deux comptes WeChat en même temps. En tant que marque nationale bien connue, les téléphones mobiles Huawei sont utilisés par de nombreuses personnes. Alors, quelle est la méthode pour ouvrir deux comptes WeChat sur les téléphones mobiles Huawei ? Dévoilons le secret de cette méthode. Tout d'abord, vous devez utiliser deux comptes WeChat en même temps sur votre téléphone mobile Huawei. Le moyen le plus simple est de le faire.
