Generator.prototype.next()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

Die next() Methode von Generator Instanzen gibt ein Objekt mit zwei Eigenschaften done und value zurück. Es kann auch ein Parameter an die next Methode übergeben werden, um einen Wert an den Generator zu senden.

Syntax

js
next()
next(value)

Parameter

value Optional

Der Wert, der an den Generator gesendet werden soll.

Der Wert wird als Ergebnis eines yield Ausdrucks zugewiesen. Zum Beispiel wird im Fall von variable = yield expression der Wert, der der .next() Funktion übergeben wird, an variable zugewiesen.

Rückgabewert

Ein Object mit zwei Eigenschaften:

done

Ein boolescher Wert:

  • true, wenn der Generator das Ende seines Kontrollflusses überschritten hat. In diesem Fall gibt value den Rückgabewert des Generators an (der möglicherweise undefiniert ist).
  • false, wenn der Generator in der Lage ist, weitere Werte zu erzeugen.
value

Jeder von JavaScript erzeugte oder zurückgegebene Wert des Generators.

Beispiele

Verwendung von next()

Das folgende Beispiel zeigt einen Generator und das Objekt, das die next Methode zurückgibt:

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

const g = gen(); // Generator { }
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }

Verwendung von next() mit einer Liste

In diesem Beispiel nimmt getPage eine Liste und "paginisiert" sie in Stücke der Größe pageSize. Jeder Aufruf von next liefert ein solches Stück.

js
function* getPage(list, pageSize = 1) {
  for (let index = 0; index < list.length; index += pageSize) {
    yield list.slice(index, index + pageSize);
  }
}

const list = [1, 2, 3, 4, 5, 6, 7, 8];
const page = getPage(list, 3); // Generator { }

page.next(); // { value: [1, 2, 3], done: false }
page.next(); // { value: [4, 5, 6], done: false }
page.next(); // { value: [7, 8], done: false }
page.next(); // { value: undefined, done: true }

Werte an den Generator senden

In diesem Beispiel wird next mit einem Wert aufgerufen.

Hinweis: Der erste Aufruf protokolliert nichts, da der Generator anfänglich nichts geliefert hat.

js
function* gen() {
  while (true) {
    const value = yield;
    console.log(value);
  }
}

const g = gen();
g.next(1); // Returns { value: undefined, done: false }
// No log at this step: the first value sent through `next` is lost
g.next(2); // Returns { value: undefined, done: false }
// Logs 2

Spezifikationen

Specification
ECMAScript Language Specification
# sec-generator.prototype.next

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch