Callbacks
Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 18 von 33.
Das Lesen einer großen Datei dauert eine Weile, und ein Programm, das darauf wartet, kann in der Zwischenzeit nichts anderes tun.
fs.readFile(path, 'utf8', callback) startet den Lesevorgang und kehrt sofort zurück. Wenn die Datei geladen ist, ruft Node deinen Callback mit (err, text) auf. Bei Erfolg ist err null, andernfalls enthält es einen Fehler; prüfe es also zuerst. Alles, was den Text benötigt, gehört in den Callback.
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 wird zuerst ausgegeben: Die Zeile nach readFile wird ausgeführt, während die Datei noch geladen wird.
Aufgabe
EinfachIn dieser Lektion wird ein neues Beispiel zum Zählen mit Callbacks in count.js geöffnet, statt deiner Dateien für das Notizwerkzeug aus Fehlerbehandlung. Die bereitgestellten Dateien notes.json, notes.js und store.js sind enthalten; deine frühere Arbeit bleibt in ihrer eigenen Lektion gespeichert.
Das Lesen einer großen Datei dauert. Mit einem Callback kann Node in der Zwischenzeit andere Aufgaben erledigen und ruft deinen Code auf, sobald die Datei bereit ist. Übe dies in einem kleinen separaten Programm, count.js, das die Notizen in einer Datei zählt.
count.jsgibt bereitsReading...aus und weiß, welche Datei gelesen werden soll:fileist das Wort, das nachnode count.jseingegeben wird, odernotes.json, wenn nichts eingegeben wird.- Lies diese Datei mit
fs.readFileund einem Callback. Alles Folgende geschieht innerhalb des Callbacks. - Wenn das Lesen erfolgreich war, wandle den Text mit
JSON.parsein ein Array um. Gib aus, wie viele Notizen das Array enthält, gefolgt vonnotes. Zähle die Notizen im Array, nicht die Zeilen der Datei.notes.jsonbeginnt mit zwei Notizen, also gibst du2 notesaus. - Wenn das Lesen fehlgeschlagen ist, das heißt, der Fehler des Callbacks nicht
nullist, gib statt der AnzahlCannot readgefolgt vom Dateinamen aus. - Gib in beiden Fällen zuletzt
Doneaus, ebenfalls innerhalb des Callbacks.
node count.js gibt Folgendes aus:
Reading...
2 notes
Donenode count.js nothere.json gibt Folgendes aus:
Reading...
Cannot read nothere.json
DoneProbiere es aus: Diese Lektion führt count.js aus, daher zeigt das Terminal $ node count.js an. Drücke auf „Spielen“, wenn das Feld leer ist, und das Programm liest notes.json. Gib dann nothere.json in das Feld ein und drücke Enter, um eine Datei zu lesen, die nicht existiert.
Probier es selbst
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
// Lies die Datei mit fs.readFile und einer Callback-Funktion.
// Gib die Anzahl der Notizen aus, dann Done.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Node.js-Grundlagen
Übe selbstständig: Express-Playground