Promise.all
Fa parte della sezione Fondamenti di Node.js del percorso Node.js di Coddy. Lezione 17 di 24.
Ora il negozio ha bisogno di due file, le note e le impostazioni, e leggerli uno dopo l'altro significa aspettare il doppio.
Promise.all([a, b]) permette a entrambe le promesse di essere eseguite contemporaneamente e aspetta finché entrambe non sono terminate. Restituisce i loro risultati nello stesso ordine dell'array e fallisce non appena una delle due fallisce.
const [user, prefs] = await Promise.all([
readFile('user.json', 'utf8'),
readFile('prefs.json', 'utf8'),
]);Usalo quando le letture non dipendono l'una dall'altra. Quando la seconda ha bisogno del risultato della prima, attendile una alla volta.
Sfida
Facilestore.jsleggenotes.jsonesettings.jsoncontemporaneamente conPromise.all. Un file delle impostazioni mancante viene considerato come{}.- Quando
settings.jsoncontiene"sort": "newest",liststampa per prima la nota più recente. Ogni nota mantiene il proprio numero.
Esegui node notes.js list. Poi cambia newest in oldest in settings.json ed eseguilo di nuovo.
Provalo tu
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;
Tutte le lezioni di Fondamenti di Node.js
1Eseguire JavaScript con Node
Ciao, NodeArgomenti della riga di comandoComandi