devstory

Le concept de Callback dans NodeJS

  1. Qu'est-ce que Callback ?
  2. Exemple de NodeJS Callback

1. Qu'est-ce que Callback ?

Pour vous expliquer ce qui signifie Callback, observez une situation ci-dessous :
Vous venez dans un magasin pour acheter quelque chose que vous aimez. Le personnel de la boutique vous dit que l'article est épuisé maintenant. Vous laissez le numéro de téléphone et demandez- lui de vous rappeler immédiatement après que la marchandise est disponible. Ensuite, vous pouvez sortir ou faire un travail et n'avez plus besoin de vous soucier de la boutique, jusqu'à ce que vous receviez un appel téléphonique pour signaler l'article demandé par la boutique.
Le serveur NodeJS peut recevoir plusieurs demandes (request) de différents utilisateurs. Donc afin d'améliorer le fonctionnement, tous les API du NodeJS sont conçu pour soutenir Callback. Le "callback" est une fonction (function), elle sera appelée lorsque le NodeJs achève une tâche (task) précise.

2. Exemple de NodeJS Callback

Dans le NodeJS, des API sont conçu pour soutenir le Callback. Supposons que vous écrivez un programme pour lire 2 fichiers. Pour ce faire, vous utilisez le module fs, qui vous donne deux fonctions telles que readFile et readFileSync pour lire le fichier. Nous allons apprendre sur les différences entre ces deux fonctions.
Blocking
Le readFileSync est une fonction qui lit les fichiers de manière synchrone (synchronous). Par conséquent, pendant que cette fonction est en cours d'exécution, cela empêchera (block) le programme d'exécuter les lignes de code suivantes.
blocking-example.js
var fs = require("fs");

// -----> Read file 1:
console.log("\n");
console.log("Read File 1");

var data1 = fs.readFileSync('C:\\test\\file1.txt');

console.log("- Data of file 1: ");
console.log(data1.toString());


// -----> Read file 2:
console.log("\n");
console.log("Read File 2");

var data2 = fs.readFileSync('C:\\test\\file2.txt');
console.log("- Data of file 2: ");
console.log(data2.toString());


console.log("\n");
console.log("Program Ended");
Ouvrez la fenêtre CMD et exécutez le fichier blocking-example.js.
node callback-examples/blocking-example.js
Et ceci est le résultat reçu :
Non Blocking
Vous devriez utiliser la fonction readFile pour obtenir de meilleures performances du programme. Cette fonction lit les fichiers de manière asynchrone (asynchronous). Il ne bloque pas (non block) le programme exécutant les lignes de code suivantes. En d'autres termes, le programme n'attend pas la fin de la fonction. Mais lorsque cette fonction termine sa tâche, elle appelle la fonction Callback.
// Read a file Asynchronous.
fs.readFile('C:\\test\\file1.txt', aCallbackFunction );
Observez l'exemple complet :
non-blocking-example.js
var fs = require("fs");

// A Callback function!
function readFinishedFile1(err, data)  {
   if (err) console.log(err);
   console.log("- Data of file 1: ");
   console.log(data.toString());
}

// A Callback function!
function readFinishedFile2(err, data)  {
   if (err) console.log(err);
   console.log("- Data of file 2: ");
   console.log(data.toString());
}

// -----> Read file 1:
console.log("\n");
console.log("Read File 1");

fs.readFile('C:\\test\\file1.txt', readFinishedFile1);

// -----> Read file 2:
console.log("\n");
console.log("Read File 2");

fs.readFile('C:\\test\\file2.txt', readFinishedFile2);

console.log("\n");
console.log("Program Ended \n");
Ouvrez la fenêtre CMD et exécutez le fichier non-blocking-example.js :
node callback-examples/non-blocking-example.js
Et ceci est le résultat que vous recevez :