Fonctions de rappel Node.js


La manifestation directe de la programmation asynchrone Node.js est le rappel.

La programmation asynchrone repose sur des rappels, mais on ne peut pas dire que le programme devient asynchrone après avoir utilisé des rappels.

La fonction de rappel sera appelée une fois la tâche terminée. Node utilise un grand nombre de fonctions de rappel. Toutes les API Node prennent en charge les fonctions de rappel.

Par exemple, nous pouvons lire un fichier tout en exécutant d'autres commandes. Une fois la lecture du fichier terminée, nous renvoyons le contenu du fichier en tant que paramètre de la fonction de rappel. De cette façon, il n’y a pas de blocage ou d’attente pour les opérations d’E/S de fichiers lors de l’exécution du code. Cela améliore considérablement les performances de Node.js et peut gérer un grand nombre de requêtes simultanées.


Exemple de code de blocage

Créez un fichier input.txt avec le contenu suivant :

php中文网官网地址:www.php.cn

Créez le fichier main.js avec le code suivant :

var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("程序执行结束!");

Les résultats d'exécution de code ci-dessus sont les suivants :

$ node main.js
php中文网官网地址:www.php.cn

程序执行结束!

Exemple de code non bloquant

Créez un fichier input.txt avec le contenu suivant :

php中文网官网地址:www.php.cn

Créez le fichier main.js, Le code est le suivant :

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

Le résultat de l'exécution du code ci-dessus est le suivant :

$ node main.js
程序执行结束!
php中文网官网地址:www.php.cn

Dans les deux exemples ci-dessus, nous comprenons la différence entre appels bloquants et non bloquants. La première instance exécute le programme uniquement après la lecture du fichier. Dans le deuxième exemple, nous n'avons pas besoin d'attendre que le fichier soit lu, afin que le code suivant puisse être exécuté en même temps que la lecture du fichier, ce qui améliore considérablement les performances du programme.

Par conséquent, le blocage est exécuté dans l'ordre, mais le non-blocage n'a pas besoin d'être dans l'ordre, donc si nous devons traiter les paramètres de la fonction de rappel, nous devons l'écrire dans la fonction de rappel.