Fonctions de rappel dans Node.js

Isaac Tony 12 octobre 2023
  1. Utiliser la fonction de rappel pour lire un fichier de manière synchrone (code de blocage) dans Node.js
  2. Utiliser la fonction de rappel pour lire un fichier de manière asynchrone (code non bloquant) dans Node.js
Fonctions de rappel dans Node.js

Une fonction de rappel est une fonction qui est exécutée après l’exécution d’un ensemble de tâches, évitant le blocage de l’ensemble du programme. Les fonctions de rappel sont un aspect important de l’écriture de programmes asynchrones et non bloquants dans Node.js.

En JavaScript, les fonctions de rappel sont formellement appelées fonctions qui passent comme arguments à d’autres fonctions. Étant donné que les fonctions JavaScript sont exécutées dans l’ordre dans lequel elles sont appelées, l’utilisation de rappels nous permet de mieux contrôler l’exécution des fonctions.

Supposons que nous ayons deux fonctions étroitement liées de sorte que le résultat d’une fonction soit utilisé comme paramètre dans l’autre fonction. Dans un tel scénario, la fonction initiale bloquera toujours la deuxième fonction jusqu’à ce que le résultat de la fonction initiale soit prêt.

Cependant, en utilisant les fonctions de rappel, nous pouvons nous assurer que la fonction initiale exécutera toujours la dernière fonction en tant que fonction de rappel après avoir terminé l’exécution de ses instructions, comme indiqué ci-dessous.

function print(callback) {
  callback();
}

Utiliser la fonction de rappel pour lire un fichier de manière synchrone (code de blocage) dans Node.js

Les rappels Node.js constituent la base de l’exécution d’opérations asynchrones, ce qui rend Node.js adapté au développement d’applications intensives en E/S. De telles applications impliquent souvent de récupérer d’énormes quantités de données sur le serveur.

Le chargement de données volumineuses est un long processus, et donc attendre que le programme charge complètement les données avant d’exécuter le reste n’est pas une bonne pratique.

Dans l’exemple ci-dessous, nous utilisons le module fs dans Node.js pour lire les données de manière synchrone avant d’exécuter le reste du code.

// Write JavaScript code
var fs = require('fs');

var filedata = fs.readFileSync('usersinfo.txt');
console.log(filedata.toString());
console.log('Other parts of the program that execute afterwards');
console.log('End of program execution');

Exemple de sortie :

First name: john
Last name: Doe
Occupation: Microservices Developer

Other parts of the program that execute afterward
End of program execution

Utiliser la fonction de rappel pour lire un fichier de manière asynchrone (code non bloquant) dans Node.js

La lecture synchrone d’un fichier bloque l’exécution des parties d’autres programmes jusqu’à ce que les données soient entièrement lues. Dans les cas où les données sont énormes, nous devrons peut-être attendre un peu plus longtemps.

Cependant, comme indiqué ci-dessous, nous pouvons exécuter une fonction qui lit ces données de manière asynchrone en arrière-plan à l’aide de fonctions de rappel tout en exécutant d’autres parties du programme.

var fs = require('fs');

fs.readFile('usersinfo.txt', function(err, data) {
  if (err) return console.error(err);
  console.log(data.toString());
});
console.log('Other parts of the program that execute afterward');

Exemple de sortie :

Other parts of the program that execute afterward
firstname: john
lastname: Doe
Occupation: Microservices Developer

En utilisant le concept de fonction de rappel dans les programmes ci-dessus, nous pouvons exécuter d’autres parties des programmes lorsque les données sont chargées en arrière-plan.

De plus, dans le code ci-dessus, nous avons également suivi la convention standard consistant à renvoyer des erreurs comme premier argument dans la fonction de rappel. Le premier objet, s’il n’est pas nul, doit être considéré comme l’objet d’erreur ; sinon, il doit rester nul.

Il fournit un moyen plus simple de savoir qu’une erreur s’est produite. Traditionnellement, étant donné que la fonction de rappel est censée être exécutée après que la fonction principale a effectué d’autres opérations, il est courant de l’avoir comme deuxième paramètre.

Pratiquement toute fonction asynchrone utilisant la fonction de rappel doit suivre la syntaxe ci-dessous dans Node.js.

function asyncOperation(param1, param2, callback) {
  // operations to be executed
  if (err) {
    console.log('An error has occured!');
    return callback(new Error('An error'));
  }
  // ... more work ...
  callback(null, param1, param2);
}

asyncOperation(parameters, function(err, returnValues) {
  // This code gets run after the async operation
});
Auteur: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn