Le concept de Callback dans NodeJS

View more Tutorials:

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 :

View more Tutorials: