yield* ile delegasyon
yield* ile başka bir generator'ı veya iterable'i nasıl delege edeceğini öğrenirsin.
yield* ile delegasyon
yield* (yıldız ile) başka bir generatoru veya iterable'ı delege etmeyi sağlar. İç generatorun tüm değerleri, dış generator tarafından sanki kendi değerleriymiş gibi üretilir. Bu, generatorları birleştirmenin temiz bir yoludur.
function* inner() {
yield 1;
yield 2;
}
function* outer() {
yield* inner();
yield 3;
}Buradan gelen değerler: 1, 2, 3 sırasıyla.
Generatorları birleştirme
yield* ile generatorları birleştirebilirsin. Her parça ayrı bir generator olarak kalır; dış generator onları sırayla tüketir. Bu, büyük bir veri akışını küçük parçalara bölmeyi kolaylaştırır.
function* vowels() { yield 'a'; yield 'e'; }
function* consonants() { yield 'b'; yield 'c'; }
function* alphabet() {
yield* vowels();
yield* consonants();
}Sonuç: a, e, b, c — tek bir döngüde tüketilebilir.
Uygulama İki generatoru birleştir
inner adında bir generator yaz: 'a' ve 'b' değerlerini üretsin. outer adında bir generator yaz: yield* inner() ile inner'ı delege etsin, sonra 'c' üretsin. for...of ile outer()'ı gez ve her değeri console.log ile yazdır.
Örnek çözümü göster
function* inner() {
yield "a";
yield "b";
}
function* outer() {
yield* inner();
yield "c";
}
for (const v of outer()) {
console.log(v);
}
Kendini test et
-
yield* ne yapar?
- Generatoru geçici olarak duraklatır
- Bir Promise döndürür
- Yalnızca tek bir değer üretir
- Başka bir generatoru veya iterable'ı delege eder
Cevabı göster
Başka bir generatoru veya iterable'ı delege eder — Doğru! yield* iç generatorun tüm değerlerini dış generatora aktarır.
-
Delegasyon ifadesini ekle
function* inner() { yield 1; yield 2; } function* outer() { ____ inner(); yield 3; }Cevabı göster
function* inner() { yield 1; yield 2; } function* outer() { yield* inner(); yield 3; } -
Delegasyon terimlerini eşleştir
- yield*
- başka generatoru delege eder
- yield
- tek değer üretir
- compose
- generatorları birleştirir