Skip to content

Asynchrone et promesses (06/02/26)

Info

Pour le TP, on a besoin de manipuler des fichiers. Mais avant d'utiliser le module file system dit "fs" (qui s'occupe de ce besoin), il faut comprendre un fonctionnement de base en informatique, essentielle aux modules faisant des requêtes a des systemes externes comme fs, l'asynchrone.

C'est quoi Asynchrone ?

Asynchrone permet de ne pas bloquer le code même si il n'a pas de résultat mais avec promesse, il laisse le code continuer pour trouver une réponse et la rapporter comme promis.

Rien de mieux qu'un exemple concret et gourmand en amont et en aval.

1. SANS Asynchrone

  1. Tu commandes un Tasty Crousty.
  2. Ce neuille de caissier part en cuisine.
  3. Il fait cuire le riz lui-même.
  4. Il coupe les tenders.
  5. Il met tout dans la barquette puis sauce.
  6. Et revient pour te donner le Tasty Crousty 67 doro party.
  7. SEULEMENT MAINTENANT, il prend la commande du gwer suivant.

Résultat : La file d'attente sort du restaurant. Si la cuisson prend 10 minutes, tout le restaurant est bloqué pendant 10 minutes. Bien guez.


2. AVEC Asynchrone

  1. Tu commandes un Tasty Crouspy.
  2. La caissière crie en cuisine "Un Crousty piquant sucré supplément poulet !".
  3. Elle te donne un bipeur, faisant donc la promesse de te servir un délicieux Crouspy Tasty.
  4. Puis elle passe directement au client suivant.
  5. Toi, tu vas t'asseoir et tu attends.

Mais c'est quoi cette promesse ? (Promise)

Note

☝️🤓 Node.js fonctionne sur un principe de thread unique (monothread)... En gros, il ne peut effectuer qu'une seule tâche à la fois.

Alors pour éviter de bloquer le programme pendant de longues opérations (comme lire des données au fin fond du disque dur), il délègue ces tâches a l'ordinateur et utilise un mécanisme de Promesses.

Dans notre exemple, la Promise, c'est le bipeur.

Ce boîtier est une promesse. Le restaurant te dit : "Je n'ai pas ton crousty tout de suite, mais je te promets que je te préviendrai dès qu'il y a du nouveau."

Une Promise a toujours 3 états possibles, et seulement 3 :

  1. En attente (Pending) : Le boîtier ne fait rien. Le cuisinier travaille. Tu attends.
  2. Succès (Resolved) : Le boîtier vibre ! La promesse est tenue, tu as ton chicken (la donnée est arrivée).
  3. Échec (Rejected) : Le manager arrive et te dit "Désolé, la cuisine a pris feu, pas de délicieux crousty pour ce soir". La promesse est rompue (il y a une erreur).

Exemples async et await

Exemple d'un async (exo du TP 2 de JS)

files.forEach((fileName) => {
    fs.readFile(fileName, 'utf8').then((content) => {
        ...
    })
});
  • fs.readFile : Envoie le job de lire un fichier à l'ordinateur avec des parametres et quand c'est pret, enrengistre son résultat dans content.
  • La Promise : En lançant fs.readFile, celui-ci promet que dès qu'il a un résultat, il le renverra dans content

Exemple concret await (exo du TP 2 de JS)

On peut également demander spécifiquement d'attendre le retour d'une promesse avec await

const stats = await fs.stat(filename);
  • fs.stat : Envoie le job de récupérer les stats d'un fichier à l'ordinateur et quand c'est pret, enrengistre son résultat dans stats.
  • La Promise : On te promet un résultat dans stats
  • **await** : Tant que l'on a pas de résultat, on "fige" à cette ligne jusqu'à ce que la promesse est reçue.