[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/yield [Back]  [Original]

yield - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

yield

Baseline Weitgehend verfgbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit September 2016 browserbergreifend verfgbar.

Der yield Operator wird verwendet, um eine Generatorfunktion zu pausieren und fortzusetzen.

In diesem Artikel

Probieren Sie es aus

function* foo(index) {
  while (index < 2) {
    yield index;
    index++;
  }
}

const iterator = foo(0);

console.log(iterator.next().value);
// Expected output: 0

console.log(iterator.next().value);
// Expected output: 1

Syntax

js
yield
yield expression

Parameter

expression Optional

Der Wert, der ber das Iterator-Protokoll aus der Generatorfunktion ausgegeben wird. Wenn weggelassen, wird undefined ausgegeben.

Rckgabewert

Gibt den optionalen Wert zurck, der an die next() Methode des Generators bergeben wurde, um die Ausfhrung fortzusetzen.

Hinweis: Das bedeutet, next() ist asymmetrisch: es sendet immer einen Wert an das aktuell angehaltene yield, gibt aber den Operanden des nchsten yield zurck. Der bergebene Wert des ersten next() Aufrufs kann nicht abgerufen werden, da kein aktuell angehaltenes yield existiert.

Beschreibung

Das Schlsselwort yield pausiert die Ausfhrung einer Generatorfunktion und der Wert des Ausdrucks nach dem yield Schlsselwort wird an den Aufrufer des Generators zurckgegeben. Es kann als generatorbasierte Version des return Schlsselworts betrachtet werden.

yield kann nur direkt innerhalb der Generatorfunktion verwendet werden, die es enthlt. Es kann nicht innerhalb verschachtelter Funktionen verwendet werden.

Der Aufruf einer Generatorfunktion erzeugt ein Generator Objekt. Jedes Mal, wenn die next() Methode des Generators aufgerufen wird, wird die Generatorausfhrung fortgesetzt und luft bis zu einem der folgenden Punkte:

  • Ein yield Ausdruck. In diesem Fall pausiert der Generator, und die next() Methode gibt ein Iterator-Ergebnis Objekt mit zwei Eigenschaften zurck: value und done. Die Eigenschaft value ist der Wert des Ausdrucks nach dem yield Operator, und done ist false, was darauf hinweist, dass die Generatorfunktion nicht vollstndig abgeschlossen ist.
  • Das Ende der Generatorfunktion. In diesem Fall endet die Ausfhrung des Generators, und die next() Methode gibt ein Iterator-Ergebnisobjekt zurck, bei dem value undefined ist und done true.
  • Eine return Anweisung. In diesem Fall endet die Ausfhrung des Generators, und die next() Methode gibt ein Iterator-Ergebnisobjekt zurck, bei dem value der angegebene Rckgabewert ist und done true.
  • Eine throw Anweisung. In diesem Fall wird die Ausfhrung des Generators vollstndig gestoppt, und die next() Methode lst die angegebene Ausnahme aus.

Einmal auf einem yield Ausdruck pausiert, bleibt die Codeausfhrung des Generators angehalten, bis die next() Methode des Generators erneut aufgerufen wird. Wenn ein optionaler Wert an die next() Methode des Generators bergeben wird, wird dieser Wert als Rckgabewert der aktuellen yield Operation des Generators. Der erste next() Aufruf hat keine entsprechende angehaltene yield Operation, sodass es keine Mglichkeit gibt, das Argument des ersten next() Aufrufs abzurufen.

Wenn die return() oder throw() Methode des Generators aufgerufen wird, wirkt dies, als ob eine return oder throw Anweisung am pausierten yield Ausdruck ausgefhrt wurde. Sie knnen try...catch...finally im Krper der Generatorfunktion verwenden, um diese vorzeitigen Abschlsse zu behandeln. Wenn die return() oder throw() Methode aufgerufen wird, aber kein angehaltener yield Ausdruck vorhanden ist (weil next() noch nicht aufgerufen wurde oder weil der Generator bereits abgeschlossen ist), dann knnen die vorzeitigen Abschlsse nicht behandelt werden und beenden den Generator immer.

Beispiele

Verwendung von yield

Der folgende Code ist die Deklaration einer Beispiel-Generatorfunktion.

js
function* countAppleSales() {
  const saleList = [3, 7, 5];
  for (const sale of saleList) {
    yield sale;
  }
}

Sobald eine Generatorfunktion definiert ist, kann ein Iterator wie folgt erstellt werden.

js
const 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 }

Sie knnen auch einen Wert mit next(value) in den Generator senden. step wird als Rckgabewert des yield Ausdrucks ausgewertet obwohl der an die next() Methode des Generators bergebene Wert beim ersten Aufruf von next() ignoriert wird.

js
function* counter(value) {
  while (true) {
    const step = yield value++;

    if (step) {
      value += step;
    }
  }
}

const generatorFunc = counter(0);
console.log(generatorFunc.next().value); // 0
console.log(generatorFunc.next().value); // 1
console.log(generatorFunc.next().value); // 2
console.log(generatorFunc.next().value); // 3
console.log(generatorFunc.next(10).value); // 14
console.log(generatorFunc.next().value); // 15
console.log(generatorFunc.next(10).value); // 26

Spezifikationen

Spezifikation
ECMAScript 2027 LanguageSpecification
# prod-YieldExpression

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page