Promises
Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 15 von 24.
Rückrufe innerhalb von Rückrufen sind schwer nachzuvollziehen, und jeder muss daran denken, err zu überprüfen.
node:fs/promises gibt stattdessen ein Promise zurück: ein Objekt, das für ein später eintreffendes Ergebnis steht. .then(fn) wird mit dem Ergebnis ausgeführt, .catch(fn) wird ausgeführt, wenn ein vorheriger Schritt fehlgeschlagen ist, und .finally(fn) wird in jedem Fall ausgeführt.
import { readFile } from 'node:fs/promises';
readFile('poem.txt', 'utf8')
.then((text) => console.log(text.length + ' characters'))
.catch(() => console.log('No poem today'))
.finally(() => console.log('Bye'));Ein innerhalb von .then ausgelöster Fehler landet ebenfalls in .catch, sodass ein einziger Handler sowohl das Lesen als auch das Parsen abdeckt. Ein Promise, das fehlschlägt und kein .catch hat, bringt das Programm zum Absturz.
Aufgabe
Einfach- Schreibe
count.jsmitreadFileausnode:fs/promisesund.thenum. - Bei einer fehlenden Datei wird jetzt
No notes yetausgegeben, und zwar über ein.catch. Donekommt weiterhin zuletzt, und zwar über.finally.
Führe zuerst node count.js und dann node count.js nothere.json aus.
Probier es selbst
import fs from 'node:fs';
const file = process.argv[2] ?? 'notes.json';
console.log('Reading...');
fs.readFile(file, 'utf8', (err, text) => {
if (err) {
console.log(`Cannot read ${file}`);
} else {
console.log(`${JSON.parse(text).length} notes`);
}
console.log('Done');
});
Alle Lektionen in Node.js-Grundlagen
1JavaScript mit Node ausführen
Hallo, NodeKommandozeilenargumenteBefehle