Menu
CoddyTech

Promise.all

Termasuk bagian Dasar-Dasar Node.js dalam perjalanan Node.js di Coddy. Pelajaran 17 dari 24.

Sekarang, store membutuhkan dua file, file notes dan settings, dan membaca keduanya secara berurutan membuatmu harus menunggu dua kali.

Promise.all([a, b]) memungkinkan kedua promise berjalan bersamaan dan menunggu hingga keduanya selesai. Fungsi ini mengembalikan hasil dalam urutan yang sama seperti array, dan gagal segera setelah salah satunya gagal.

const [user, prefs] = await Promise.all([
    readFile('user.json', 'utf8'),
    readFile('prefs.json', 'utf8'),
]);

Gunakan ini saat pembacaan tidak saling bergantung. Jika pembacaan kedua membutuhkan hasil pembacaan pertama, tunggu keduanya satu per satu.

challenge icon

Tantangan

Mudah
  • store.js membaca notes.json dan settings.json secara bersamaan dengan Promise.all. File settings yang tidak ada dianggap sebagai {}.
  • Saat settings.json berisi "sort": "newest", list mencetak catatan terbaru terlebih dahulu. Setiap catatan tetap menggunakan nomornya.

Jalankan node notes.js list. Lalu ubah newest menjadi oldest di settings.json dan jalankan lagi.

Coba sendiri

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;

Semua pelajaran di Dasar-Dasar Node.js

Latihan sendiri: Playground Express