Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Fonction de rappel (callback)

Une fonction de rappel (aussi appelée callback en anglais) est une fonction passée dans une autre fonction en tant qu'argument, qui est ensuite invoquée à l'intérieur de la fonction externe pour accomplir une sorte de routine ou d'action.

L'utilisateur·ice d'une API basée sur les fonctions de rappel écrit une fonction qui est transmise à l'API. Le fournisseur de l'API (appelé l'appelant) prend cette fonction et la rappelle (ou l'exécute) à un moment donné dans le corps de l'appelant. L'appelant est responsable de transmettre les bons paramètres à la fonction de rappel. Il peut aussi attendre une valeur de retour particulière de la fonction de rappel, qui servira à orienter le comportement ultérieur de l'appelant.

Il existe deux façons d'appeler une fonction de rappel : synchrone et asynchrone. Les rappels synchrones sont appelés immédiatement après l'invocation de la fonction externe, sans tâche asynchrone intermédiaire, tandis que les rappels asynchrones sont appelés plus tard, après qu'une opération asynchrone soit terminée.

Comprendre si le rappel est appelé de façon synchrone ou asynchrone est particulièrement important pour analyser les effets de bord. Considérez l'exemple suivant :

js
let valeur = 1;

faireUnTruc(() => {
  valeur = 2;
});

console.log(valeur); // 1 ou 2 ?

Si faireUnTruc appelle le rappel de façon synchrone, alors la dernière instruction affichera 2 car value = 2 est exécuté immédiatement ; sinon, si le rappel est asynchrone, la dernière instruction affichera 1 car value = 2 n'est exécuté qu'après l'instruction console.log.

Des exemples de rappels synchrones incluent les fonctions de rappel passées à Array.prototype.map(), Array.prototype.forEach(), etc. Des exemples de rappels asynchrones incluent ceux passés à setTimeout() et Promise.prototype.then(). Voici des exemples d'implémentation de faireUnTruc qui appellent le rappel de façon synchrone et asynchrone :

js
// Synchrone
function faireUnTruc(callback) {
  callback();
}

// Asynchrone
function faireUnTruc(callback) {
  setTimeout(callback, 0);
}

Le guide Utiliser les promesses fournit plus d'informations sur le moment d'exécution des rappels asynchrones.

Voir aussi