Das Generator Objekt wird von der Generator Function zurückgegeben und entspricht beidem, dem Iterable Protokoll und dem Iterator Protokoll.

Syntax

function* gen() { 
  yield 1;
  yield 2;
  yield 3;
}

var g = gen(); // "Generator { }"

Methoden

Generator.prototype.next()
Gibt einen Wert vom Generator zurück (ausgelöst durch yield).
Generator.prototype.return()
Gibt den gegebene Wert zurück und beendet den Generator.
Generator.prototype.throw()
Erzeugt einen Fehler im Generator (beendet auch den Generator, wenn der Fehler nicht im Generator abgefangen wird).

Beispiele

Ein unendlicher Iterator

function* idMaker() {
    var index = 0;
    while(true)
        yield index++;
}

var gen = idMaker(); // "Generator { }"

console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...

Veraltete Generatorobjekte

Firefox (SpiderMonkey) hat eine frühe Version der Generatoren in JavaScript 1.7 implementiert, bei der kein Stern (*) in der Funktionsdeklaration nötig war (man benutzte nur das yield Schlüsselwort im Funktionsrumpf). Seit Firefox 58 (Released am 23. Januar 2018) sind diese veralteten Generatoren entfernt (Bug 1083482).

Veraltete Generator Methoden

Generator.prototype.next()
Gibt einen Wert vom yield Ausdruck zurück. Diese korrespondiert mit der next() Methode in ES2015 Generator Objekt.
Generator.prototype.close()
Beendet einen Generator, so dass der Aufruf von next() zu einem StopIteration Fehler führt. Diese korrespondiert mit der return() Methode in ES2015 Generator Objekt.
Generator.prototype.send()
Wird benutzt, um einen Wert zum Generator zu senden. Der wert wird vom yield Ausdruck zurückgegeben und gibt einen Wert vom nächsten yield Ausdruck zurück. Diese korrespondiert mit der next(x) Methode in ES2015 Generator Objekt.
Generator.prototype.throw()
Erzeugt einen Fehler im Generator. Diese korrespondiert mit der throw() Methode in ES2015 Generator Objekt.

Veraltete Generator Beispiele

function fibonacci() {
  var a = yield 1;
  yield a * 2;
}

var it = fibonacci();
console.log(it);          // "Generator {  }"
console.log(it.next());   // 1
console.log(it.send(10)); // 20
console.log(it.close());  // undefined
console.log(it.next());   // throws StopIteration (as the generator is now closed)

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Generator objects' in dieser Spezifikation.
Standard Initiale Definition.
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Generator objects' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Grundlegende Unterstützung391326 Nein Ja10
next391326 Nein Ja10
return501338 Nein3710
throw391326 Nein Ja10
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Grundlegende Unterstützung Ja Ja1326 Ja10 Ja
next Ja Ja1326 Ja10 Ja
return ?501338 Ja105.0
throw Ja Ja1326 Ja10 Ja

Siehe auch

Veraltete Generatoren

ES2015 Generatoren

Schlagwörter des Dokuments und Mitwirkende

 Mitwirkende an dieser Seite: schlagi123, fscholz
 Zuletzt aktualisiert von: schlagi123,