TP 12 - Opérations asynchrones

Présentation théorique

Les opérations asynchrones sont des opérations non bloquantes, c'est-à-dire qu'elles renvoient un résultat immédiat, le traitement étant effectué en arrière-plan.

Dans ce laboratoire, nous utiliserons des fonctions asynchrones pour effectuer des opérations qui nécessitent un traitement (par exemple, la lecture du fichier).

Dans ce laboratoire, vous utiliserez l'environnement de programmation Node.js.

Node.js

Node.js est un environnement de programmation JavaScript caractérisé par la prise en charge des opérations asynchrones.

Pour installer node.js, accédez au lien suivant: https://nodejs.org/en/.

Fonctions asynchrones

Dans node.js, une fonction asynchrone a le format suivant:

function foo ([p1, p2, ..., ]callbackFunction){
    <code>
    callbackFunction ([param1, param2,...]);
}

Fondamentalement, la fonction asynchrone reçoit en paramètre une autre fonction, qu'elle appelle une fois le traitement terminé.

L'appel d'une fonction asynchrone a le format suivant:

foo ([p1, p2, ...,] function ([param1, param2,...]){
    <code>
});

Le même code peut être écrit comme ceci:

foo ([p1, p2, ...,] ([param1, param2,...])=>{
    <code>
});

L'appel à une fonction asynchrone reviendra immédiatement et le programme continuera à exécuter d'autres appels de fonction. Dans l'intervalle, le système d'exploitation traitera les demandes de fonctions précédentes. Lorsque le traitement d'une fonction est prêt, la fonction de rappel sera appelée et la routine qui lui est associée sera exécutée.

fs

fs est le module Node.js qui prend en charge les opérations sur les fichiers. Les fonctions les plus importantes qui y sont exposées sont:

Le programme ci-dessous utilise des fonctions asynchrones pour écrire un fichier, après quoi il lit son contenu:

const fs = require ('fs');
fs.writeFile ('myFile', 'my message', function (err){
  console.log ('Processing done');
  if (err){
    console.log ('There was an error writing the file');
  }
  else{
    fs.readFile ('myFile', function (err, data){
      if (err){
        console.log ('There was an error reading the file');
      }
      else{
        console.log (data.toString());
      }
    });
  }
});

child_process

child_process est le module qui permet la création de processus enfants et l'interaction avec eux.

Le module décrit les fonctions importantes suivantes:

La différence entre les deux fonctions est que execFile reçoit un rappel en tant que paramètre qui sera appelé une fois que le processus enfant aura terminé son exécution, tandis que spawn renvoie une structure qui pré-présente le processus enfant, qui enregistre les événements.

Le programme suivant lance un processus utilisant les deux fonctions:

const child_process = require ('child_process');
child_process.execFile ('ls', function (err, stdout, stderr){
  if (err) console.log ('Execution had an error');
  console.log ('output messages'+stdout);
  console.log ('error messages'+stderr)
});
 
const proc = child_process.spawn ('ls');
proc.stdout.on ('data', function (data){
  console.log ('Spawn process output: '+data.toString());
});
 
proc.on ('exit', function (){
  console.log ('Spawn process closed.');
});

Exercices

Pour résoudre ces exercices, vous n'utiliserez que des fonctions asynchrones.

Exercice 1 - Lecture des fichiers

Créez un programme qui utilise le module fs pour afficher le contenu de deux fichiers texte. Vous pouvez choisir deux fichiers texte sur le système.

Exécutez le programme plusieurs fois et notez comment ils sont affichés.

Exercice 2 - Lecture du dossier

Créez un programme qui affiche le contenu du répertoire parent.

Exercice 3 - Creation des fichiers

Créez un programme qui crée deux fichiers, puis affiche leur contenu et le contenu du répertoire en cours, où les fichiers générés doivent être affichés.

Exercice 4 - pwd

Créez un programme qui exécute la commande pwd puis la commande ls … Résolvez l'exigence de deux manières.

Exercice 5 - Input

Créez le fichier script.sh avec le contenu suivant:

read text
echo $text

Créez un programme qui exécute le script ci-dessus. Le programme doit envoyer une ligne de texte au script. (Indice: subprocess.stdin).

Exercice 6 - File input

Créez un fichier sur le système contenant une ligne de texte. Modifiez le programme ci-dessus pour que la ligne de texte soit celle lue dans le fichier.

Exercice 7

Créez un programme qui essaie de lire un fichier inexistant. Affichez l'erreur reçue et extrayez son code.

Exercice 8 - Execution error

Annulez le droit d'exécuter le script créé dans l'exercice 5, puis essayez de l'exécuter. Affichez l'erreur reçue et extrayez son code.

sde/laboratoare/12_fr_js.txt · Last modified: 2020/05/06 12:29 by ioana_maria.culic
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0