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. Sie können der next-Methode auch einen Parameter übergeben, 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 in variable = yield expression, wird der an die .next()-Funktion übergebene Wert der variable zugewiesen.

Rückgabewert

Ein Object mit zwei Eigenschaften:

done

Ein boolescher Wert:

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

Jeder JavaScript-Wert, der vom Generator geliefert oder zurückgegeben wird.

Beispiele

Verwendung von next()

Das folgende Beispiel zeigt einen einfachen 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 Blöcken der Größe pageSize. Jeder Aufruf von next liefert einen solchen Block.

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 }

Senden von Werten an den Generator

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