// // Exemple de "Callback Hell" en JavaScript // Comme on peut le constater, chaque opération dépend du résultat de la précédente. // Cela conduit à une indentation profonde et rend le code difficile à lire et à maintenir. // // --- Fonctions asynchrones simulées --- // 1. Récupère un utilisateur function getUser(id, callback) { console.log("Recherche de l'utilisateur..."); setTimeout(() => { // Simule un succès ou une erreur aléatoire if (id === 1) { const user = { id: 1, name: "Alice" }; callback(null, user); // Pas d'erreur, on renvoie l'utilisateur } else { callback("Utilisateur non trouvé", null); // Erreur } }, 1000); // Attend 1 seconde } // 2. Récupère les permissions de l'utilisateur function getPermissions(user, callback) { console.log(`Recherche des permissions pour ${user.name}...`); setTimeout(() => { const permissions = { level: "admin" }; callback(null, permissions); }, 1000); } // 3. Récupère les articles de blog de l'utilisateur function getPosts(user, callback) { console.log(`Recherche des articles de ${user.name}...`); setTimeout(() => { const posts = ["Article 1", "Article 2", "Article 3"]; callback(null, posts); }, 1000); } // --- Le Début du Callback Hell --- console.log("Début du processus..."); getUser(1, (error, user) => { if (error) { console.error(error); } else { console.log("Utilisateur trouvé :", user); // Une fois qu'on a l'utilisateur, on lance la 2ème opération getPermissions(user, (error, permissions) => { if (error) { console.error(error); } else { console.log("Permissions trouvées :", permissions); // Une fois qu'on a les permissions, on lance la 3ème opération getPosts(user, (error, posts) => { if (error) { console.error(error); } else { console.log("Articles trouvés :", posts); // On a enfin toutes nos données console.log("\n--- Résultat final ---"); console.log(`Nom de l'utilisateur : ${user.name}`); console.log(`Niveau de permission : ${permissions.level}`); console.log(`Derniers articles : ${posts.join(', ')}`); } }); } }); } });