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.
Görev
KolayBu 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.jsdosyasınınode:fs/promisesiçindenreadFileve.thenkullanarak yeniden yazın.- Eksik bir dosya artık
.catchiçindenNo notes yetyazdırır. Donehâlâ en son,.finallyiç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
1JavaScript’i Node Üzerinde Çalıştırma
Merhaba, NodeKomutu OkumaKomut Satırı ArgümanlarıKomutlarKendi başına pratik yap: Express playground