Promise.all
Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 25 sur 33.
Des lectures indépendantes peuvent fournir différentes parties d’un même résultat. Lance les deux opérations, attends leurs résultats, puis utilise chaque résultat à sa propre fin.
const [forecast, location] = await Promise.all([
readFile('forecast.txt', 'utf8'),
readFile('location.txt', 'utf8'),
]);
console.log(location + ': ' + forecast);L’ordre des résultats suit celui du tableau d’entrée, même si la deuxième lecture se termine en premier. Ton outil de notes lit plutôt les notes et un paramètre d’affichage. L’assistant readJson préparé gère les fichiers manquants ou endommagés. Formate les numéros des notes avant d’inverser l’ordre des lignes affichées, afin qu’un changement d’affichage ne change jamais la note désignée par un numéro.
Défi
FacileCette étape ouvre le projet de l’outil de notes en ligne de commande préparé pour le cours, et non les fichiers de votre projet de Async and Await (y compris store.js). Votre travail précédent reste dans sa propre leçon. Lisez les fichiers fournis avant de modifier store.js. Cette copie contient les commandes de notes, un lecteur JSON et un fichier de configuration.
L’outil de notes a maintenant besoin de notes.json et de settings.json. L’assistant readJson(name, fallback) fourni conserve la gestion existante des erreurs de fichiers.
- Dans
store.js, remplacez les espaces réservés vides par les résultats de la lecture simultanée des deux fichiers avecPromise.all. Si le fichier de notes est manquant, utilisez[]; si les paramètres sont manquants, utilisez{}. - Dans
notes.js, la branchelistcrée déjà des lignes numérotées. Lorsquestore.settings.sortvautnewest, inversez ces lignes avant de les afficher. Toute autre valeur du paramètre conserve l’ordre initial.
Essayez list : après Notes for you, vous devriez voir 2. Call Ada, 1. Buy milk. Remplacez le paramètre par oldest et réessayez : les mêmes numéros apparaissent en ordre croissant. Rétablissez newest avant de vérifier.
Essayez vous-même
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);
}
};
// Remplacez ces valeurs provisoires par les deux résultats 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;
Toutes les leçons de Les bases de Node.js
1Exécuter JavaScript avec Node
Bonjour, NodeLire la commandeArguments de ligne de commandeCommandes5Événements, entrées et packages
Écouter avant d’émettreÉmetteurs d’événementsLire les entréesEntraînez-vous par vous-même : Playground Express