CodeBlanks Logo Icon CodeBlanks

Asenkron generator'lar

async function* ile asenkron generator'ları ve for await...of ile gezinmeyi öğrenirsin.

Asenkron generatorler

async function* ile asenkron generator tanımlarsın. Bu generator, yield ile Promise dönebilir ve gövdesinde await kullanabilir. Her yield, bir Promise çözülene kadar bekleyebilir.

async function* stream() {
  yield await fetch('/data');
  yield await fetch('/more');
}

Asenkron generatorlar, ağ istekleri veya veritabanı sorguları gibi zaman alan işlemleri adım adım üretmek için idealdir.

for await...of döngüsü

Asenkron bir generatoru gezmek için for await...of döngüsü kullanılır. Bu döngü, her değeri bir Promise olarak bekler ve sırayla verir. for...of kullanamazsın çünkü değerler zaman içinde gelir.

for await (const chunk of stream()) {
  console.log(chunk);
}

Her chunk için döngü gövdesi çalışır; generator bittiğinde döngü sonlanır.

Uygulama Asenkron generator yaz

fetchNumbers adında bir asenkron generator yaz: yield await Promise.resolve(1), yield await Promise.resolve(2), yield await Promise.resolve(3) olsun. for await...of ile generatoru gez ve her değeri console.log ile yazdır.

Başlangıç kodu

script.js
// fetchNumbers asenkron generator: await ile 1, 2, 3 değerlerini üretsin
// for await...of ile her değeri yazdır

Örnek çözüm

script.js
async function* fetchNumbers() {
  yield await Promise.resolve(1);
  yield await Promise.resolve(2);
  yield await Promise.resolve(3);
}
for await (const n of fetchNumbers()) {
  console.log(n);
}

Soru ve cevaplar

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

1 Asenkron bir generatoru gezmek için hangi döngü kullanılır?

  • forEach
  • for...in
  • for await...of Doğru cevap
  • while...await

Açıklama: for await...of asenkron generatorlardan değerleri sırayla bekleyerek alır.

2 for await döngüsünü tamamla

Soru
async function* stream() {
  yield 1;
}

____ (const value of stream()) {
  console.log(value);
}
Cevap
async function* stream() {
  yield 1;
}

for await (const value of stream()) {
  console.log(value);
}

Açıklama: for await...of ile asenkron generator gezilir.

3 Asenkron generator terimlerini eşleştir

Kavram Anlamı
async function* asenkron generator tanımlar
for await...of asenkron generatoru gezer
await Promise bekler

İleri seviye bölümündeki tüm dersler