Semaine_1.pdf

Qu’est-ce que la fonction de rappel (Callback) ?

En JavaScript, les fonctions sont généralement exécutées de manière séquentielle. Une fonction s'exécute dans l'ordre dans lequel vous l'appelez, et non dans l'ordre dans lequel vous la définissez.

Exemple :

// functions
function cat() {
    console.log("This is a cat");
}
function dog() {
    console.log("This is a dog.");
}

// function call
cat();
dog();

// output will be
// This is a cat.
// This is a dog.

La fonction que nous passons en argument à une autre fonction s’appelle une fonction de rappel.

Exemple :

function xyz(call){
	call();
}

Contrôle de séquence

function myDisplayer(some) {
    document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2) {
    let sum = num1 + num2;
    return sum;
}

let result = myCalculator(5, 5);
myDisplayer(result);

Le problème avec le premier exemple ci-dessus, c'est que vous devez appeler deux fonctions pour afficher le résultat.

function myDisplayer(some) {
    document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2) {
    let sum = num1 + num2;
    myDisplayer(sum);
}

myCalculator(5, 5);

Le problème avec ce deuxième exemple, c'est que vous ne pouvez pas empêcher la fonction myCalculator d'afficher le résultat.

Contrôle de séquence avec Callback

function myDisplayer(some) {
    document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2, Callback) {
    let sum = num1 + num2;
    Callback(sum);
}

myCalculator(5, 5, myDisplayer);

Dans l’exemple ci-dessus, myDisplayer est le nom d’une fonction. Il est passé à myCalculator() en tant qu’argument.

<aside> ☝

Lorsque vous passez une fonction en argument, n'oubliez pas de ne pas utiliser de parenthèses.

</aside>

Correcte : myCalculator(5, 5, myDisplayer); Faux : myCalculator(5, 5, myDisplayer());

<aside> 💡

Là ou les rappels brillent vraiment, ce sont dans les fonctions asynchrones, où une fonction doit attendre une autre fonction (comme attendre le chargement d’un fichier).

</aside>

Vue d’ensemble sur NodeJS Event Loop