76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
//
|
|
// 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(', ')}`);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}); |