Menu
CoddyTech

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.

challenge icon

Défi

Facile
  • store.js lit notes.json et settings.json en même temps avec Promise.all. Un fichier de paramètres manquant est considéré comme {}.
  • Lorsque settings.json contient "sort": "newest", list affiche 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