Menu
CoddyTech

Promise.all

Coddy'nin Node.js Journey'sinin Node.js Temelleri bölümünün bir parçası. Ders 17 / 24.

Mağaza artık iki dosyaya ihtiyaç duyuyor: notlar ve ayarlar; bunları art arda okumak iki kez beklemeye yol açar.

Promise.all([a, b]), iki promise'in de aynı anda çalışmasını sağlar ve ikisi de tamamlanana kadar bekler. Sonuçlarını dizideki sırayla döndürür ve içlerinden biri başarısız olur olmaz hata verir.

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

Okumalar birbirine bağlı olmadığında bunu kullan. İkincisi ilkinin sonucuna ihtiyaç duyduğunda, her birini sırayla await et.

challenge icon

Görev

Kolay
  • store.js, notes.json ve settings.json dosyalarını aynı anda Promise.all ile okur. Olmayan bir ayar dosyası {} olarak kabul edilir.
  • settings.json içinde "sort": "newest" varsa list, en yeni notu ilk sırada yazdırır. Her not numarasını korur.

node notes.js list komutunu çalıştır. Ardından settings.json içinde newest değerini oldest olarak değiştir ve komutu yeniden çalıştır.

Kendin dene

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;

Node.js Temelleri bölümündeki tüm dersler