Zruck zum Blog, du Zniachtl
März 2022·1 Min. zum LesnVo da KI übersetzt

JavaScript - Generatoren

#javascript

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.

NeicherPromisesElterJavaScript Closures