Menu
CoddyTech

Callbacks

Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 18 sur 33.

La lecture d’un gros fichier prend du temps, et un programme qui attend sans rien faire ne fait rien d’autre pendant ce temps.

fs.readFile(path, 'utf8', callback) lance la lecture et retourne aussitôt. Lorsque le fichier est chargé, Node appelle votre fonction de rappel avec (err, text). err vaut null en cas de réussite et contient une erreur dans le cas contraire ; vérifiez-le donc en premier. Tout ce qui a besoin du texte doit se trouver dans la fonction de rappel.

import fs from 'node:fs';

fs.readFile('poem.txt', 'utf8', (err, text) => {
    if (err) {
        console.log('No poem today');
        return;
    }
    console.log(text.split('\n').length + ' lines');
});
console.log('Asked for the poem');

Asked for the poem s’affiche en premier : la ligne qui suit readFile s’exécute pendant que le fichier est encore en cours de chargement.

challenge icon

Défi

Facile

Cette leçon ouvre un nouvel exemple de comptage avec callback dans count.js, plutôt que les fichiers de votre outil de notes de la leçon Gestion des erreurs. Les fichiers fournis notes.json, notes.js et store.js sont inclus ; votre travail précédent reste enregistré dans sa propre leçon.

Lire un gros fichier prend du temps. Avec un callback, Node peut faire autre chose entre-temps et rappeler votre code quand le fichier est prêt. Entraînez-vous avec un petit programme séparé, count.js, qui compte les notes d’un fichier.

  1. count.js affiche déjà Reading... et sait quel fichier lire : file est le mot saisi après node count.js, ou notes.json si rien n’est saisi.
  2. Lisez ce fichier avec fs.readFile et un callback. Tout ce qui suit se passe à l’intérieur du callback.
  3. Si la lecture a réussi, transformez le texte en tableau avec JSON.parse. Affichez le nombre de notes que contient le tableau, suivi de notes. Comptez les notes du tableau, pas les lignes du fichier. notes.json contient deux notes au départ ; affichez donc 2 notes.
  4. Si la lecture a échoué, c’est-à-dire si l’erreur du callback n’est pas null, affichez Cannot read suivi du nom du fichier au lieu du nombre.
  5. Dans les deux cas, affichez Done en dernier, également depuis l’intérieur du callback.

node count.js affiche :

Reading...
2 notes
Done

node count.js nothere.json affiche :

Reading...
Cannot read nothere.json
Done

Essayez : cette leçon exécute count.js, donc le terminal affiche $ node count.js. Appuyez sur « Jouer » en laissant la zone vide : le programme lit alors notes.json. Ensuite, saisissez nothere.json dans la zone et appuyez sur Entrée pour lire un fichier qui n’existe pas.

Essayez vous-même

import fs from 'node:fs';

const file = process.argv[2] ?? 'notes.json';

console.log('Reading...');
// Lisez le fichier avec fs.readFile et une fonction de rappel.
// Affichez le nombre de notes, puis Done.
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Les bases de Node.js

Entraînez-vous par vous-même : Playground Express