Dans cette section, nous verrons comment nodejs implémente les opérations non bloquantes.
Modifions d'abord le gestionnaire de démarrage :
Ce code crée une nouvelle variable content (la valeur initiale est "vide"), exécute la commande "ls -lah", attribue le résultat au contenu et renvoie enfin le contenu.
Nous avons introduit un nouveau module Node.js, child_process, qui permet d'implémenter une opération non bloquante simple et pratique : exec().
Alors, que fait exec() ?
Il exécute une commande shell depuis Node.js. Dans l'exemple ci-dessus, nous l'utilisons pour obtenir tous les fichiers du répertoire actuel ("ls -lah"), puis nous envoyons les informations sur le fichier au navigateur lorsque /startURL est demandé.
Nous démarrons le serveur et visitons "http://localhost:8888/start" et nous constaterons que le contenu de sortie de la page est vide.
exec() entre en jeu. Avec lui, nous pouvons effectuer des opérations shell très chronophages sans forcer notre application à s'arrêter et à attendre l'opération.
Même ainsi, le contenu produit par la page ne semble pas être le résultat que nous souhaitons.
Analysons les raisons :
Notre code est exécuté de manière synchrone, ce qui signifie qu'après avoir appelé exec(), Node.js exécutera immédiatement le contenu de retour
;À l'heure actuelle, le contenu est toujours "vide" car la fonction de rappel passée à exec() n'a pas encore été exécutée - car le fonctionnement de exec() est asynchrone.
Nous présenterons comment résoudre ce problème dans la section suivante.