Chapitre 9 : Asynchronisme (Promises, Fetch)
1. Introduction
La gestion des erreurs permet de gérer les situations imprévues sans faire planter l'application.
2. try / catch / finally
Syntaxe de base
try {
// Code susceptible de générer une erreur
let resultat = riskyFunction();
} catch (error) {
// Gestion de l'erreur
console.error("Erreur:", error.message);
} finally {
// Toujours exécuté
console.log("Nettoyage");
}
Exemple concret
try {
let data = JSON.parse('{"nom": "Alice"}');
console.log(data.nom); // "Alice"
} catch (error) {
console.error("Erreur de parsing:", error);
}
try {
let invalid = JSON.parse('{invalid json}');
} catch (error) {
console.error("JSON invalide:", error.message);
}
3. L'instruction throw
Permet de lancer une erreur personnalisée :
function diviser(a, b) {
if (b === 0) {
throw new Error("Division par zéro impossible");
}
return a / b;
}
try {
let resultat = diviser(10, 0);
} catch (error) {
console.error(error.message); // "Division par zéro impossible"
}
4. Types d'erreurs
Error (erreur générique)
throw new Error("Quelque chose s'est mal passé");
TypeError
let x = null;
try {
x.toUpperCase(); // TypeError
} catch (error) {
console.log(error.name); // "TypeError"
}
ReferenceError
try {
console.log(variableInexistante); // ReferenceError
} catch (error) {
console.log(error.name); // "ReferenceError"
}
SyntaxError
try {
eval('let x = ;'); // SyntaxError
} catch (error) {
console.log(error.name); // "SyntaxError"
}
5. Erreurs personnalisées
class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError";
}
}
function validerAge(age) {
if (age < 0) {
throw new ValidationError("L'âge ne peut pas être négatif");
}
if (age > 150) {
throw new ValidationError("L'âge semble invalide");
}
return true;
}
try {
validerAge(-5);
} catch (error) {
if (error instanceof ValidationError) {
console.error("Erreur de validation:", error.message);
} else {
console.error("Erreur inconnue:", error);
}
}
6. Gestion des erreurs asynchrones
Avec Promises
fetch("https://api.example.com/data")
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(data => console.log(data))
.catch(error => console.error("Erreur:", error));
Avec async/await
async function chargerDonnees() {
try {
let response = await fetch("https://api.example.com/data");
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
let data = await response.json();
return data;
} catch (error) {
console.error("Erreur lors du chargement:", error);
return null;
}
}
7. Debugging avec console
console.log("Message normal");
console.warn("Avertissement");
console.error("Erreur");
console.info("Information");
// Afficher un objet
let user = { nom: "Alice", age: 25 };
console.table(user);
// Grouper des messages
console.group("Détails utilisateur");
console.log("Nom:", user.nom);
console.log("Age:", user.age);
console.groupEnd();
// Mesurer le temps
console.time("Operation");
// ... code ...
console.timeEnd("Operation");
8. Exercice pratique
// Fonction de validation avec gestion d'erreurs
function validerFormulaire(data) {
try {
if (!data.nom || data.nom.trim() === "") {
throw new ValidationError("Le nom est requis");
}
if (!data.email || !data.email.includes("@")) {
throw new ValidationError("Email invalide");
}
if (data.age < 18) {
throw new ValidationError("Vous devez être majeur");
}
return { succes: true, message: "Formulaire valide" };
} catch (error) {
if (error instanceof ValidationError) {
return { succes: false, message: error.message };
}
throw error; // Relancer si erreur inattendue
}
}
// Test
let resultat1 = validerFormulaire({
nom: "Alice",
email: "alice@example.com",
age: 25
});
console.log(resultat1); // { succes: true, ... }
let resultat2 = validerFormulaire({
nom: "",
email: "invalid",
age: 15
});
console.log(resultat2); // { succes: false, message: "Le nom est requis" }
Conclusion
Vous savez maintenant gérer les erreurs en JavaScript ! Dans le prochain chapitre, nous allons découvrir la programmation orientée objet.
Quiz du chapitre 9
Ateliers pratiques & Projets
Testez vos compétences avec nos exercices guidés et le tuteur IA.
Ateliers pratiques & Corrigés détaillés
Ateliers pratiques & Corrigés
#1 — SetTimeout
Atelier #1Exécute une fonction après un délai de 2 secondes.
Consulter la solution type du formateur
#2 — Promesse simple
Atelier #2Comment appelle-t-on le résultat positif d'une Promesse (quand elle réussit) ?
Consulter la solution type du formateur
#3 — Utilisation de Fetch
Atelier #3Fais une requête GET simple vers une API 'https://api.test.com/data'.
Consulter la solution type du formateur
#4 — Async / Await
Atelier #4Réécris la requête Fetch ci-dessus en utilisant async et await.
Consulter la solution type du formateur
#5 — Gestion d'erreur (Try/Catch)
Atelier #5Comment capturer une erreur dans une fonction asynchrone ?