Async generators
- Node.js kursu
- Orta seviye
- Ders 48/116
- 5 dk
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
// async generator ile öğelerin iki katını ver
// döngüde tüket ve yazdır
// buraya yazÖrnek çözüm
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
yield ____ Promise.resolve(item * 2);
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?
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.