Menu
CoddyTech

Promise'ler

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

Geri çağrıların iç içe geçmesi takibi zorlaştırır ve her birinde err değerini kontrol etmek gerekir.

node:fs/promises bunun yerine bir promise döndürür: daha sonra gelecek bir sonucu temsil eden bir nesne. .then(fn) sonuçla çalışır, .catch(fn) önceki adımlardan herhangi biri başarısız olursa çalışır ve .finally(fn) her iki durumda da çalışır.

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

readFile('poem.txt', 'utf8')
    .then((text) => console.log(text.length + ' characters'))
    .catch(() => console.log('No poem today'))
    .finally(() => console.log('Bye'));

.then içinde fırlatılan bir hata da .catch bloğuna düşer; böylece tek bir işleyici hem okumayı hem de ayrıştırmayı kapsar. .catch olmadan başarısız olan bir promise programın çökmesine neden olur.

challenge icon

Görev

Kolay

Bu adım, Callbacks dersindeki proje dosyalarınız yerine, kurs için hazırlanmış notlar komut satırı aracı projesini açar (count.js dahil). Önceki çalışmalarınız kendi dersinde kalır. count.js dosyasını düzenlemeden önce sağlanan dosyaları okuyun. Bu kopya, asenkron not sayma örneğini içerir.

  • count.js dosyasını node:fs/promises içinden readFile ve .then kullanarak yeniden yazın.
  • Eksik bir dosya artık .catch içinden No notes yet yazdırır.
  • Done hâlâ en son, .finally içinden yazdırılır.

node count.js, ardından node count.js nothere.json komutunu çalıştırın.

Argüman verilmediğinde çıktı, her biri ayrı satırda olacak şekilde önce Reading..., sonra 2 notes, ardından Done olur. nothere.json verildiğinde orta satır No notes yet olur.

Kendin dene

import fs from 'node:fs';

const file = process.argv[2] ?? 'notes.json';

console.log('Reading...');
fs.readFile(file, 'utf8', (err, text) => {
    if (err) {
        console.log(`Cannot read ${file}`);
    } else {
        console.log(`${JSON.parse(text).length} notes`);
    }
    console.log('Done');
});

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

Kendi başına pratik yap: Express playground