Das yield Schlüsselwort wird eingesetzt zum Anhalten und Fortsetzen einer Generatorfunktion (function* oder veralteten Generatorfunktion) eingesetzt.

Syntax

[rv] = yield [expression];
expression
Definiert den Wert, der von der Generatorfunktion über das Iterator Protokoll zurückgegeben wird. wird dieser weggelassen, wird undefined zurückgegeben.
rv

Gibt den optionalen Wert zurück, der der next() Methode des Generators übergeben wird, damit dieser weiter verarbeitet werden kann.

Beschreibung

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:

  •  Ein 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.
  • throw wird eingesetzt um einen Fehler im Generator zu erzeugen. Dieses stoppt den Generator vollständig und führt dazu, dass die Ausführung beim Aufrufer fortgesetzt wird, wie es bei üblicherweise bei Fehlern der Fall ist.
  • Das Ende einer Generatorfunktion wird erreicht; In diesem Fall endet die Ausführung des Generator und ein IteratorResult Objekt wird zum Aufrufer zurückgegeben, bei dem value undefined ist und done true ist.
  • Ein return Statement wird erreicht. In diesem Fall endet die Ausführung des Generators und ein 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 Generator.prototype.next() übergeben wird, sind Generatoren sehr leistungsstark und kontrollierbar.

Beispiele

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, wue 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 }

Spezifikationen

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

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidEdge MobileFirefox für AndroidOpera für AndroidSafari auf iOSSamsung InternetNode.js
Grundlegende UnterstützungChrome Vollständige Unterstützung 39Edge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 26
Hinweise
Vollständige Unterstützung 26
Hinweise
Hinweise Starting with Firefox 33, the parsing of the yield expression has been updated to conform with the ES2015 specification.
IE Keine Unterstützung NeinOpera Vollständige Unterstützung JaSafari Vollständige Unterstützung 10WebView Android Vollständige Unterstützung 39Chrome Android Vollständige Unterstützung 39Edge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 26
Hinweise
Vollständige Unterstützung 26
Hinweise
Hinweise Starting with Firefox 33, the parsing of the yield expression has been updated to conform with the ES2015 specification.
Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung 10Samsung Internet Android Vollständige Unterstützung 4.0nodejs Vollständige Unterstützung 4.0.0
Vollständige Unterstützung 4.0.0
Vollständige Unterstützung 0.12
Deaktiviert
Deaktiviert From version 0.12: this feature is behind the --harmony runtime flag.
IteratorResult object instead of throwingChrome ? Edge ? Firefox Vollständige Unterstützung 29IE Keine Unterstützung NeinOpera ? Safari Vollständige Unterstützung 10WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android Vollständige Unterstützung 29Opera Android ? Safari iOS Vollständige Unterstützung 10Samsung Internet Android ? nodejs ?

Legende

Vollständige Unterstützung  
Vollständige Unterstützung
Keine Unterstützung  
Keine Unterstützung
Kompatibilität unbekannt  
Kompatibilität unbekannt
Siehe Implementierungshinweise.
Siehe Implementierungshinweise.
Benutzer muss dieses Feature explizit aktivieren.
Benutzer muss dieses Feature explizit aktivieren.

Firefox spezifische Hinweise

  • Angefangen mit Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26), erzeugt eine fertige Generatorfunktion keinen TypeError "generator has already finished" mehr. Stattdessen wird ein IteratorResult Objekt wie folgendes zurückgegeben: { value: undefined, done: true } (Bug 958951).
  • Angefangen mit Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30), wurde das einlesen des yield Ausdrucks aktualisert, um konform mit der ES2015 Spezifikation zu sein (Bug 981599):
    • Der Ausdruck nach dem yield Schlüsselwort ist optional und das Weglassen führt nicht mehr zu einem SyntaxError: function* countAppleSales() { yield; }

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

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