Menu
CoddyTech

Async ve Await

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

.then çağrıları zinciri, adımları düşündüğünüz sıradan farklı görünür: oku, sonra ayrıştır, ardından kaydet.

Bir async işlevinin içinde await, bir promise sonuçlanana kadar bekler ve değerini verir. Başarısız bir promise burada hata fırlatır; bu nedenle try ve catch bunu yönetir. Bir modülde await, en üst düzeyde de çalışır.

import { readFile } from 'node:fs/promises';

const loadConfig = async () => {
    try {
        return JSON.parse(await readFile('config.json', 'utf8'));
    } catch {
        return {};
    }
};

const config = await loadConfig();
console.log(config.port ?? 3000);

Bir async işlevi her zaman bir promise döndürür; bu yüzden onu çağıran kod da await kullanarak bekler. Bir await ifadesini unutursanız, değeri yerine promise'ın kendisini, Promise { <pending> }, elde edersiniz.

challenge icon

Görev

Kolay
  • store.js artık node:fs/promises ile okuma ve yazma işlemleri yapıyor. Her komutun eskisi gibi çalışması için eksik await ifadelerini ekle.
  • notes.js, artık async olan store.add ve store.remove işlevlerini bekliyor.

Önce hatayı okumak için node notes.js list komutunu çalıştır, sonra çalıştığında add ve done 1 komutlarını çalıştır.

Kendin dene

import { existsSync } from 'node:fs';
import { readFile, writeFile } from 'node:fs/promises';

const file = 'notes.json';

// readFile ve writeFile artık promise döndürüyor. Her birini await ile bekleyin.
const load = async () => {
    if (!existsSync(file)) {
        return [];
    }
    try {
        return JSON.parse(readFile(file, 'utf8'));
    } catch (err) {
        console.error(`notes.json is damaged: ${err.message}`);
        process.exit(1);
    }
};

const store = {
    notes: load(),
    async save() {
        writeFile(file, JSON.stringify(this.notes, null, 2));
    },
    async add(text) {
        this.notes.push(text);
        this.save();
        return this.notes.length;
    },
    async remove(n) {
        const [text] = this.notes.splice(n - 1, 1);
        this.save();
        return text;
    },
};

export default store;
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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