Bonjour, chers hĂ©ros JS đ
Le sujet dâaujourdâhui est Callback Hell â ce problĂšme en JavaScript oĂč le code se dĂ©cale parfois vers la droite comme une pyramide et te fait pleurer.
Si tu as dĂ©jĂ vu un code comme celui-ci et que tu as pensĂ© « Quâest-ce qui se passe ?! », tu es au bon endroit đ
doSomething(function(result) {
doSomethingElse(result, function(newResult) {
doAnotherThing(newResult, function(finalResult) {
// et ainsi de suite...
});
});
});
Dans le monde JS, nous appelons cela la âPyramide de la Doomâ. Mais ne tâinquiĂšte pas, il y a une issue đȘâš
đ€ Quâest-ce quâun Callback ?
Un callback est une fonction passĂ©e en argument Ă une autre fonction et appelĂ©e aprĂšs lâexĂ©cution de la tĂąche principale.
Imagine que tu dis Ă quelquâun : « PrĂ©viens-moi quand ton travail est terminĂ© », et JS rĂ©pond : « Bien sĂ»r, je mâen occupe » đ
Exemple 1 : Salutation simple
function greet(name, callback) {
console.log(`Hello ${name}`);
callback();
}
greet("Cansu", function() {
console.log("Bienvenue dans le monde JS !");
});
Explication :
- La fonction
greetprend deux paramĂštres :nameetcallback - Dâabord, elle affiche
Hello Cansu - Ensuite, elle appelle le callback â affiche
"Bienvenue dans le monde JS !"
Conclusion : Callback = le mĂ©canisme de JS pour âprĂ©viens-moi quand tu as finiâ đ
đ”âđ« Quâest-ce que le Callback Hell ?
Mais quand les choses se compliquent⊠JS nous offre le cauchemar de lâĂ©chelle.
login(user, function(userData) {
getProfile(userData, function(profile) {
getFriends(profile, function(friends) {
getPosts(friends, function(posts) {
displayPosts(posts);
});
});
});
});
ProblĂšmes :
- Le code se décale vers la droite
- Fonction dans fonction â illisible
- Gestion des erreurs difficile
- DĂ©bogage = cauchemar đ”âđ«
Astuce : Câest ce que nous appelons Callback Hell / Pyramide de la Doom đ
đĄ Comment Ă©chapper au Callback Hell
1ïžâŁ Fonctions sĂ©parĂ©es (Approche modulaire)
function showPosts(posts) {
displayPosts(posts);
}
function fetchPosts(friends) {
getPosts(friends, showPosts);
}
function fetchFriends(profile) {
getFriends(profile, fetchPosts);
}
login(user, function(userData) {
getProfile(userData, fetchFriends);
});
Avantages :
- Le code se lit de haut en bas
- Moins de dĂ©calage â plus propre
- Débogage plus facile
Astuce : En faisant de chaque callback une fonction sĂ©parĂ©e, ton code devient lisible et rĂ©utilisable đ
2ïžâŁ DĂ©couvre les Promises (HĂ©ros moderne JS âĄ)
Une Promise est JS qui te dit : âDâaccord, je te prĂ©viendrai quand le travail sera terminĂ©â đ
login(user)
.then(userData => getProfile(userData))
.then(profile => getFriends(profile))
.then(friends => getPosts(friends))
.then(posts => displayPosts(posts))
.catch(err => console.error(err));
Avantages :
- Le code se lit de haut en bas â plus naturel
.catch()gĂšre les erreurs en un seul endroit- Callback Hell = disparu đ
Astuce : Chaque .then() peut retourner une nouvelle opĂ©ration, et JS attend â magie du chaining âš
3ïžâŁ Async / Await â LâĂ©tape finale đ
Async/Await = la version magique des Promises, presque synchrone
async function showUserPosts(user) {
try {
const userData = await login(user);
const profile = await getProfile(userData);
const friends = await getFriends(profile);
const posts = await getPosts(friends);
displayPosts(posts);
} catch (err) {
console.error("Oups, une erreur est survenue :", err);
}
}
Avantages :
- Le code se lit presque comme du JS synchrone normal
try/catchpermet une gestion propre des erreurs- Callback Hell ? Disparu đ
Humour :
Utiliser Async/Await = flirter avec JS đ
Pendant que tu te demandes âQuand est-ce que ça finit ?â, tu prends rĂ©ellement le contrĂŽle đ
đ§ Astuces pratiques & Trucs inhabituels
- Faire de chaque callback une fonction sĂ©parĂ©e â lisibilitĂ© + rĂ©utilisabilitĂ©
- Promise.all() â exĂ©cuter plusieurs tĂąches async indĂ©pendantes en mĂȘme temps
- Gestion des erreurs â
.catch()outry/catchpour un contrÎle centralisé - Chaining
.then()â Ă©viter les callbacks compliquĂ©s - Async/Await â code presque synchrone
Exemple : Promise.all
const friends = getFriends(profile);
const posts = getPosts(friends);
const photos = getPhotos(friends);
Promise.all([friends, posts, photos])
.then(results => {
displayAll(results);
})
.catch(err => console.error(err));
Avantages :
- Exécute 3 opérations indépendantes simultanément
- Code propre et rapide
- Callback Hell ? Disparu ! đ
đŻ RĂ©sumĂ© : Callback Hell = Drame Ă©vitable
- Ăcris des petites fonctions â la modularitĂ© est reine đ
- Utilise les Promises â magie du chaining âš
- Utilise Async/Await â JS propre, presque synchrone
- Gestion des erreurs â contrĂŽle centralisĂ©
JS peut essayer de te faire peur avec les callbacks, mais rappelle-toi :
Chaque Ă©chelle a une sortie đż

