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.
Aufgabe
Einfachstore.jsliestnotes.jsonundsettings.jsongleichzeitig mitPromise.all. Eine fehlende Einstellungsdatei gilt als{}.- Wenn
settings.json"sort": "newest"enthält, gibtlistdie 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
1JavaScript mit Node ausführen
Hallo, NodeKommandozeilenargumenteBefehle