Promise.all
Parte de la sección Conceptos básicos de Node.js del Journey de Node.js de Coddy. Lección 25 de 33.
Las lecturas independientes pueden proporcionar distintas partes de un mismo resultado. Inicia ambas operaciones, espera sus resultados y después usa cada resultado para su propósito.
const [forecast, location] = await Promise.all([
readFile('forecast.txt', 'utf8'),
readFile('location.txt', 'utf8'),
]);
console.log(location + ': ' + forecast);El orden de los resultados sigue el de la matriz de entrada, aunque la segunda lectura termine primero. En cambio, tu herramienta de notas lee las notas y una configuración de visualización. El ayudante readJson preparado se encarga de los archivos ausentes o dañados. Da formato a los números de las notas antes de invertir las líneas de visualización, para que cambiar la vista nunca cambie a qué nota corresponde un número.
Desafío
FácilEste paso abre el proyecto preparado del curso para la herramienta de línea de comandos de notas, no los archivos de tu proyecto de Async and Await (incluido store.js). Tu trabajo anterior sigue en su propia lección. Lee los archivos proporcionados antes de editar store.js. Esta copia contiene los comandos de notas, un lector de JSON y un archivo de configuración.
Ahora la herramienta de notas necesita tanto notes.json como settings.json. El asistente readJson(name, fallback) proporcionado conserva el manejo existente de errores de archivo.
- En
store.js, reemplaza los marcadores de posición vacíos por los resultados de leer ambos archivos juntos conPromise.all. Si falta el archivo de notas, se usa[]; si faltan los ajustes, se usa{}. - En
notes.js, la ramalistya crea líneas numeradas. Cuandostore.settings.sortseanewest, invierte esas líneas antes de imprimirlas. Cualquier otro ajuste conserva el orden original.
Prueba list: después de Notes for you, espera 2. Call Ada, 1. Buy milk. Cambia el ajuste a oldest y vuelve a probar: aparecerán los mismos números en orden ascendente. Restablece newest antes de comprobarlo.
Pruébalo tú mismo
import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';
const file = 'notes.json';
const readJson = async (name, fallback) => {
if (!existsSync(name)) {
return fallback;
}
try {
return JSON.parse(await readFile(name, 'utf8'));
} catch (err) {
console.error(`${name} is damaged: ${err.message}`);
process.exit(1);
}
};
// Reemplaza estos marcadores de posición con los dos resultados de readJson.
const notes = [];
const settings = {};
const store = {
notes,
settings,
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
Practica por tu cuenta: Playground de Express