JavaScript - Generatoren
JavaScript-Generatoren sand a leistungsfähige Funktionstechnik, de JavaScript-Entwicklern zur Verfügung steht. Generatoren ermöglichen es, asynchrone Funktionen auf a sauberere und strukturiertere Art zu schreibn. Aber wos sand Generatoren eigentlich?
A Generator is a spezielle Funktion, de es dem Entwickler ermöglicht, Werte schrittweise zruckzugebn, statt olle auf amoi zruckzugebn. Generatoren kinnan a zur Erstellung von Iteratoren valwendet wern. A Funktion, de ois Generator definiert wurde, kann durch des Schlüsselwort "yield" mehrere Werte zruckgebn.
Do is a Beispiel, des zeigt, wia ma an einfachen Generator in JavaScript erstöt:
function* idGenerator() {
let id = 0;
while(true) {
yield id++;
}
}
let gen = idGenerator();
console.log(gen.next().value); // Ausgabe: 0
console.log(gen.next().value); // Ausgabe: 1
console.log(gen.next().value); // Ausgabe: 2
In dem Beispiel wird a Generatorfunktion "idGenerator" definiert, de a While-Schleifn enthoit, de unendlich lauft und bei jedem Durchlauf a ID zruckgibt, de um 1 erhöht wird. Der Wert vo da ID wird durch des "yield"-Schlüsselwort zruckgebn. Mia initialisieren a Instanz dieser Generatorfunktion mit "let gen = idGenerator()" und gebn dann drei IDs aus, indem ma "console.log(gen.next().value)" dreimoi aufrufen.
De Ausgabe vom obigen Code wird "0", "1" und "2" sei.
Generatoren kinnan a asynchrone Funktionen unterstützn, indem's "yield" valwenden, um den Code zu unterbrechn und auf des Ergebnis ana asynchronen Operation zu wartn, bevor's die nächste Zeiln vom Code ausführn. Do is a Beispiel, des zeigt, wia ma an asynchronen Generator in JavaScript erstöt:
function* asyncIdGenerator() {
let id = 0;
while(true) {
yield fetch('https://jsonplaceholder.typicode.com/todos/' + id)
.then(response => response.json())
.then(data => data.id);
id++;
}
}
let gen = asyncIdGenerator();
gen.next().value.then(val => console.log(val)); // Ausgabe: 1
gen.next().value.then(val => console.log(val)); // Ausgabe: 2
In dem Beispiel wird dieselbe Generatorfunktion "idGenerator" valwendet, aber statt ana einfachen Inkrementierung von da ID wird a asynchrone Funktion valwendet, um Daten von ana API abzurufen und die ID aus da Antwort zruckzugebn. Die "fetch"-Methode wird valwendet, um die Daten abzurufen, und des "yield"-Schlüsselwort wird valwendet, um die Ausführung von da Generatorfunktion zu unterbrechn, bis die asynchrone Operation abgschlossen is. Mia initialisieren a Instanz dieser Generatorfunktion mit "let gen = asyncIdGenerator()" und gebn dann zwoa IDs aus, indem ma "console.log(gen.next().value.then(val => console.log(val)))" zwoamoi aufrufen. Die Ausgabe vom obigen Code wird "1" und "2" sei.