--- title: yield slug: Web/JavaScript/Reference/Operators/yield tags: - ECMAScript 2015 - Generators - Iterator - JavaScript - Operator translation_of: Web/JavaScript/Reference/Operators/yield ---
Das yield
Schlüsselwort wird eingesetzt zum Anhalten und Fortsetzen einer Generatorfunktion ({{jsxref("Statements/function*", "function*")}} oder veralteten Generatorfunktion) eingesetzt.
[rv] = yield [expression];
expression
undefined
zurückgegeben.rv
Gibt den optionalen Wert zurück, der der next()
Methode des Generators übergeben wird, damit dieser weiter verarbeitet werden kann.
Das yield
Schlüsselwort hält die Ausführung der Generatorfunktion an und gibt den Wert des Ausdrucks nach dem yield
Schlüsselwort an den Aufrufer des Generators zurück. Es kann als die generatorbasierte Version des return
Schlüsselwortes gesehen werden.
Das yield
Schlüsselwort gibt ein IteratorResult
Objekt mit zwei Eigenschaften, value
und done
, zurück. Die value
Eigenschaft ist das Ergebnis des ausgewerteten yield
Ausdrucks und done
ist false
, was gedeutet, dass der Generator noch nicht fertig ist.
Solange ein yield
Ausdruck pausiert, wird die Codeausführung des Generators pausiert, bis die next()
Methode des Generators aufgerufen wird. Mit jedem Aufruf der Generator next()
Methode läuft der Generator weiter, bis einer der folgenden Punkte eintritt:
yield
, welches dazu führt, dass der Generator wieder Pausiert und einen neuen Generatorwert zurückgibt. Beim nächsten Aufruf von next()
wird die Ausführung direkt nach dem yield
fortgesetzt.IteratorResult
Objekt wird zum Aufrufer zurückgegeben, bei dem value
{{jsxref("undefined")}} ist und done
true
ist.IteratorResult
Objekt wird zum Aufrufer zurückgegeben, welches als value
den vom return
Statement spezifizierten Wert enthält und done
true
ist.Wenn ein optionaler Wert der next()
Methode des Generators übergeben wird, wird der Wert es der aktuelle Rückgabewert der yield
Operation sein.
Durch den Generatorcodepfad, seinem yield
Operator und der Möglichkeit einen neuen Startwert zu spezifizierten, indem dieser an {{jsxref("Generator.prototype.next()")}} übergeben wird, sind Generatoren sehr leistungsstark und kontrollierbar.
Der folgende Code ist die Deklaration einer Beispielgeneratorfunktion.
function* countAppleSales () { var saleList = [3, 7, 5]; for (var i = 0; i < saleList.length; i++) { yield saleList[i]; } }
Wenn eine Generatorfunktion definiert ist, kann dieser benutzt werden, um einen Iterator, wie gezeigt, zu erstellen.
var appleStore = countAppleSales(); // Generator { } console.log(appleStore.next()); // { value: 3, done: false } console.log(appleStore.next()); // { value: 7, done: false } console.log(appleStore.next()); // { value: 5, done: false } console.log(appleStore.next()); // { value: undefined, done: true }
Spezifikation | Status | Kommentar |
---|---|---|
{{SpecName('ES2015', '#', 'Yield')}} | {{Spec2('ES2015')}} | Initiale Definition. |
{{SpecName('ESDraft', '#', 'Yield')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.operators.yield")}}
IteratorResult
Objekt wie folgendes zurückgegeben: { value: undefined, done: true }
({{bug(958951)}}).yield
Ausdrucks aktualisert, um konform mit der ES2015 Spezifikation zu sein ({{bug(981599)}}):
yield
Schlüsselwort ist optional und das Weglassen führt nicht mehr zu einem {{jsxref("SyntaxError")}}: function* countAppleSales() { yield; }