Promise.all
Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 17 sur 24.
Le magasin a maintenant besoin de deux fichiers, les notes et les paramètres, et les lire l’un après l’autre fait attendre deux fois.
Promise.all([a, b]) permet aux deux promesses de s’exécuter en même temps et attend qu’elles soient toutes les deux terminées. Il renvoie leurs résultats dans le même ordre que le tableau et échoue dès que l’une d’elles échoue.
const [user, prefs] = await Promise.all([
readFile('user.json', 'utf8'),
readFile('prefs.json', 'utf8'),
]);Utilise-le lorsque les lectures ne dépendent pas l’une de l’autre. Lorsque la seconde a besoin du résultat de la première, attends-les l’une après l’autre.
Défi
Facilestore.jslitnotes.jsonetsettings.jsonen même temps avecPromise.all. Un fichier de paramètres manquant est considéré comme{}.- Lorsque
settings.jsoncontient"sort": "newest",listaffiche la note la plus récente en premier. Chaque note conserve son numéro.
Exécutez node notes.js list. Ensuite, remplacez newest par oldest dans settings.json, puis exécutez la commande de nouveau.
Essayez vous-même
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;
Toutes les leçons de Les bases de Node.js
1Exécuter JavaScript avec Node
Bonjour, NodeArguments de ligne de commandeCommandes4Node asynchrone
Fonctions de rappelPromesses