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 dernext()
Methode in ES2015 Generator Objekt. Generator.prototype.close()
- Beendet einen Generator, so dass der Aufruf von
next()
zu einemStopIteration
Fehler führt. Diese korrespondiert mit derreturn()
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ächstenyield
Ausdruck zurück. Diese korrespondiert mit dernext(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 (ECMA-262) Die Definition von 'Generator objects' in dieser Spezifikation. |
Lebender Standard |
Browserkompatibilität
BCD tables only load in the browser
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.