Programmation JavaScript/Exceptions et erreurs
try / catch / finally
[modifier | modifier le wikicode]Pour éviter qu'une erreur interrompe l'exécution du programme, on peut l'attraper et définir des actions à effectuer si elle survient.
Les exceptions les plus courantes sont des ressources introuvables (ex : plus de réseau ou base de données en maintenance) ou des calculs impossibles comme les divisions par zéro.
Exemples
[modifier | modifier le wikicode]Appel réseau :
try {
call_network()
} catch (error) {
print_retry_later_message()
} finally {
log()
}
Calcul d'une moyenne :
"use strict";
const x = 15;
let average;
try {
x = x + 5;
average = x / 0;
alert("The average is: " + average);
} catch (err) {
alert("Something strange occurs. The error is: " + err);
} finally {
alert("End of program.");
}
Dans cet exemple, la division par zéro montre que l'exécution est toujours interrompue avant l'affichage de la moyenne, pour passer dans le bloc catch
puis le finally
.
Si on corrige la division, on constate qu'on ne passe plus dans le bloc catch
, mais toujours dans le finally
(même si les blocs qui le précèdent contiennent un return
).
throw
[modifier | modifier le wikicode]Il est aussi possible de provoquer soi-même des exceptions pour interrompre une exécution.
Exemples
[modifier | modifier le wikicode]Calcul d'une moyenne :
"use strict";
const x = 15;
let average;
try {
average = x / 0;
if (average === Infinity || Number.isNaN(average)) {
throw "Error during division. The result is: " + average;
}
alert("The average is: " + average);
} catch (err) {
alert("Something strange occurs. The error is: " + err);
} finally {
alert("End of program.");
}
Ici la division par zéro ne provoque pas d'exception, mais renvoie Infinity. On la provoque donc explicitement ensuite.
Calcul d'un âge :
"use strict";
const answer = prompt("How old are you?");
const age = Number(answer);
if (isNaN(age)) {
throw answer + " cannot be converted to a number.";
}
alert("Next year you will be " + (age + 1));