CodeBlanks Logo Icon CodeBlanks

Async generators

Async generator fonksiyonları öğrenirsin.

Async generator ile veri akıtma

Bir async generator, yield await ile promise çözen değerler üretebilir. Bu, veriyi parça parça akıtmak için kullanılır. Örnek: async function* fetchItems(items) { for (const item of items) { yield await Promise.resolve(item * 2); } }.

Bu generator, bir dizinin her öğesini iki katına çıkarıp tek tek verir. yield await deseninin gücü: yield bir promise verir, await onu çözer, for await çözülmüş değeri alır. Bu, her öğenin bir veritabanı sorgusu veya API çağrısı olduğu senaryolarda kullanışlıdır. fetchItems([1, 2, 3]) çağrısı 2, 4, 6 değerlerini akıtır. Tüm öğeler bir kerede değil, istendikçe üretilir; bu, bellek verimliliği sağlar.

for await ile async generator tüketme

Bir async generator'ı for await...of ile tüketirsin. Her döngü adımında generator bir sonraki yield'e ilerler ve değeri verir. Örnek: for await (const v of fetchItems([1, 2, 3])) { console.log(v); }.

Bu döngü, generator tamamlanana kadar devam eder. Her yield await bir duraklamadır: for await promise'ın çözülmesini bekler, değeri alır ve döngü gövdesini çalıştırır. Bu, normal bir for...of döngüsü gibidir, ama her adımda bir await olur. Çıktı: 2, 4, 6. Bu desen, büyük veri kümelerini belleğe yüklemeden tek tek işlemek için idealdir; her öğe yalnızca gerektiğinde üretilir.

Uygulama Async generator ile iki kat yaz

async function* fetchItems(items) tanımla: for (const item of items) { yield await Promise.resolve(item * 2); }. async function main() içinde for await (const v of fetchItems([1, 2, 3])) { console.log("Değer: " + v); } yaz. main() çağır.

Başlangıç kodu

index.js
// async generator ile öğelerin iki katını ver
// döngüde tüket ve yazdır
// buraya yaz

Örnek çözüm

index.js
async function* fetchItems(items) {
  for (const item of items) {
    yield await Promise.resolve(item * 2);
  }
}

async function main() {
  for await (const v of fetchItems([1, 2, 3])) {
    console.log("Değer: " + v);
  }
}

main();

Beklenen çıktı

Değer: 2
Değer: 4
Değer: 6

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 yield await satırını tamamla

Soru
yield ____ Promise.resolve(item * 2);
Cevap
yield await Promise.resolve(item * 2);

Açıklama: yield await ile promise çözülüp değer üretilir.

2 Parçayı rolüne eşle

Kavram Anlamı
async function* Generator tanımlar
yield await Promise çözüp değer üretir
for await Generator tüketir
Promise.resolve Promise oluşturur

3 async function* ne döndürür?

index.js
const gen = fetchItems([1, 2, 3]);
  • Bir sayı
  • Bir dizi
  • Bir promise
  • Bir async iterator Doğru cevap

Açıklama: async function* çağrıldığında bir async iterator döndürür.

Orta seviye bölümündeki tüm dersler