Promise.all
Parte de la sección Conceptos básicos de Node.js del Journey de Node.js de Coddy. Lección 17 de 24.
La tienda ahora necesita dos archivos, las notas y la configuración, y leerlos uno después del otro hace que la espera dure el doble.
Promise.all([a, b]) permite que ambas promesas se ejecuten al mismo tiempo y espera hasta que las dos terminen. Devuelve sus resultados en el mismo orden que el arreglo y falla en cuanto una de ellas falla.
const [user, prefs] = await Promise.all([
readFile('user.json', 'utf8'),
readFile('prefs.json', 'utf8'),
]);Úsalo cuando las lecturas no dependan unas de otras. Cuando la segunda necesite el resultado de la primera, espéralas una por una.
Desafío
Fácilstore.jsleenotes.jsonysettings.jsonal mismo tiempo conPromise.all. Si falta el archivo de configuración, se considera que su valor es{}.- Cuando
settings.jsoncontiene"sort": "newest",listimprime primero la nota más reciente. Cada nota conserva su número.
Ejecuta node notes.js list. Después, cambia newest por oldest en settings.json y vuelve a ejecutarlo.
Pruébalo tú mismo
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;
Todas las lecciones de Conceptos básicos de Node.js
1Ejecutar JavaScript en Node
Hola, NodeArgumentos de la línea de comandosComandos