Confier une tâche à quelqu’un en lui disant « préviens-moi quand c’est fini » : voilà le principe d’une fonction de rappel. Plutôt que d’attendre bêtement le résultat d’une opération, on transmet une fonction qui sera appelée au bon moment, avec le résultat en paramètre.
Un usage omniprésent en JavaScript
Les callbacks servent à réagir à un événement (clic, chargement de page), à traiter le résultat d’une requête réseau, ou à s’exécuter après un délai avec setTimeout. Sur un site WordPress, un thème enrichi en JavaScript utilise couramment ce mécanisme : un script attend que le DOM soit prêt avant d’initialiser un carrousel, ou attend la réponse d’un appel à l’API REST de WordPress avant d’afficher des articles supplémentaires.
Exemple
function chargerArticles(callback) {
fetch('/wp-json/wp/v2/posts')
.then(reponse => reponse.json())
.then(donnees => callback(donnees));
}
chargerArticles(function(articles) {
console.log(articles.length + ' articles reçus');
});
Ici, la fonction anonyme passée en second argument ne s’exécute qu’une fois les articles récupérés : elle « rappelle » le programme principal avec la donnée attendue.
Pièges fréquents
- Empiler des callbacks imbriqués rend le code difficile à lire, un phénomène parfois surnommé « callback hell ». Les promesses ou
async/awaitoffrent une syntaxe plus lisible pour le même besoin. - Un callback qui capture une variable de boucle sans fermeture correctement gérée peut recevoir une valeur inattendue au moment de son exécution différée.
- Oublier de vérifier qu’un argument est bien une fonction avant de l’invoquer provoque une erreur si un développeur passe autre chose par erreur.