Menu
CoddyTech

Promises

Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 21 von 33.

Callbacks innerhalb von Callbacks sind schwer nachzuvollziehen, und jeder muss daran denken, err zu prü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 fehlschlägt, 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 Fehler, der innerhalb von .then ausgelöst wird, landet ebenfalls in .catch, sodass ein Handler sowohl das Lesen als auch das Parsen abdeckt. Ein Promise, das fehlschlägt und kein .catch hat, bringt das Programm zum Absturz.

challenge icon

Aufgabe

Einfach

Dieser Schritt öffnet das vorbereitete Projekt des Kurses für ein Notizen-Befehlszeilentool und nicht deine Projektdateien aus Callbacks (einschließlich count.js). Deine frühere Arbeit bleibt in ihrer eigenen Lektion. Lies die bereitgestellten Dateien, bevor du count.js bearbeitest. Diese Kopie enthält das Beispiel zum asynchronen Zählen von Notizen.

  • Schreibe count.js mit readFile aus node:fs/promises und .then neu.
  • Bei einer fehlenden Datei wird jetzt No notes yet ausgegeben, und zwar über ein .catch.
  • Done steht weiterhin am Ende und stammt aus .finally.

Führe node count.js aus und dann node count.js nothere.json.

Ohne Argument lautet die Ausgabe Reading..., 2 notes und dann Done, jeweils in einer eigenen Zeile. Mit nothere.json lautet die mittlere Zeile No notes yet.

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

Übe selbstständig: Express-Playground