Menu
CoddyTech

Promise.all

Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 17 von 24.

Der Speicher benötigt jetzt zwei Dateien, die Notizen und die Einstellungen, und wenn man sie nacheinander liest, muss man zweimal warten.

Promise.all([a, b]) lässt beide Promises gleichzeitig laufen und wartet, bis beide abgeschlossen sind. Es gibt ihre Ergebnisse in derselben Reihenfolge wie im Array zurück und schlägt fehl, sobald eines davon fehlschlägt.

const [user, prefs] = await Promise.all([
    readFile('user.json', 'utf8'),
    readFile('prefs.json', 'utf8'),
]);

Verwende es, wenn die Lesevorgänge nicht voneinander abhängen. Wenn der zweite das Ergebnis des ersten benötigt, warte nacheinander auf sie.

challenge icon

Aufgabe

Einfach
  • store.js liest notes.json und settings.json gleichzeitig mit Promise.all. Eine fehlende Einstellungsdatei gilt als {}.
  • Wenn settings.json "sort": "newest" enthält, gibt list die neueste Notiz zuerst aus. Jede Notiz behält ihre Nummer.

Führe node notes.js list aus. Ändere dann newest in settings.json zu oldest und führe den Befehl erneut aus.

Probier es selbst

import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';

const file = 'notes.json';

const load = async () => {
    if (!existsSync(file)) {
        return [];
    }
    try {
        return JSON.parse(await readFile(file, 'utf8'));
    } catch (err) {
        console.error(`notes.json is damaged: ${err.message}`);
        process.exit(1);
    }
};

const store = {
    notes: await load(),
    async save() {
        await writeFile(file, JSON.stringify(this.notes, null, 2));
    },
    async add(text) {
        this.notes.push(text);
        await this.save();
        return this.notes.length;
    },
    async remove(n) {
        const [text] = this.notes.splice(n - 1, 1);
        await this.save();
        return text;
    },
};

export default store;

Alle Lektionen in Node.js-Grundlagen