Menu
CoddyTech

Promise.all

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

Bağımsız okumalar tek bir sonucun farklı bölümlerini sağlayabilir. Her iki işlemi de başlatın, sonuçlarını bekleyin, ardından her sonucu kendi amacı için kullanın.

const [forecast, location] = await Promise.all([
    readFile('forecast.txt', 'utf8'),
    readFile('location.txt', 'utf8'),
]);
console.log(location + ': ' + forecast);

İkinci okuma önce tamamlansa bile sonuçların sırası giriş dizisini izler. Notlar aracınız bunun yerine notları ve bir görüntüleme ayarını okur. Hazırlanmış readJson yardımcısı eksik ve bozuk dosyaları işler. Not numaralarını, görüntüleme satırlarını tersine çevirmeden önce biçimlendirin; böylece görünümü değiştirmek, bir numaranın hangi notu belirlediğini asla değiştirmez.

challenge icon

Görev

Kolay

Bu adım, Async and Await dersindeki kendi proje dosyaların (store.js dâhil) yerine, kurs için hazırlanmış notlar komut satırı aracı projesini açar. Önceki çalışmaların kendi dersinde kalır. store.js dosyasını düzenlemeden önce sağlanan dosyaları oku. Bu kopya, not komutlarını, JSON okuyucusunu ve yapılandırma dosyasını içerir.

Notlar aracı artık hem notes.json hem de settings.json dosyalarına ihtiyaç duyuyor. Sağlanan readJson(name, fallback) yardımcı işlevi, mevcut dosya hatası işleme davranışını korur.

  1. store.js dosyasında, boş yer tutucuları her iki dosyanın da Promise.all ile birlikte okunmasıyla elde edilen sonuçlarla değiştir. Olmayan bir notlar dosyası için []; olmayan ayarlar için {} kullanılır.
  2. notes.js dosyasında, list dalı zaten numaralandırılmış satırlar oluşturuyor. store.settings.sort değeri newest olduğunda, yazdırmadan önce bu satırları tersine çevir. Diğer tüm ayarlarda özgün sıralama korunur.

list komutunu dene: Notes for you satırından sonra 2. Call Ada, 1. Buy milk çıktısını bekle. Ayarı oldest olarak değiştirip yeniden dene: aynı numaralar artan sırada görünür. Kontrol etmeden önce newest ayarını geri yükle.

Kendin dene

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);
    }
};

// Bu yer tutucuları iki readJson sonucuyla değiştirin.
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;

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

Kendi başına pratik yap: Express playground