AsyncGenerator.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 January 2020.
Die next()
Methode von AsyncGenerator
Instanzen gibt den nächsten Wert in der Sequenz zurück.
Syntax
next()
next(value)
Parameter
value
Optional-
Ein optionaler Wert, der verwendet wird, um den internen Zustand des Generators zu ändern. Ein Wert, der an die
next()
Methode übergeben wird, wird vonyield
empfangen
Rückgabewert
Ein Promise
, der, wenn aufgelöst, ein Object
mit zwei Eigenschaften zurückgibt:
done
-
Ein boolescher Wert:
true
, wenn der Generator das Ende seines Kontrollflusses erreicht hat. In diesem Fall gibtvalue
den Rückgabewert des Generators an (der undefiniert sein kann).false
, wenn der Generator in der Lage ist, weitere Werte zu erzeugen.
value
-
Jeder beliebige JavaScript-Wert, der vom Generator erzeugt oder zurückgegeben wurde.
Beispiele
Verwendung von next()
Das folgende Beispiel zeigt einen Generator und das Objekt, das die next
Methode zurückgibt:
// An async task. Pretend it's doing something more useful
// in practice.
function delayedValue(time, value) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(value), time);
});
}
async function* createAsyncGenerator() {
yield delayedValue(500, 1);
yield delayedValue(500, 2);
yield delayedValue(500, 3);
}
const asyncGen = createAsyncGenerator();
asyncGen.next().then((res) => console.log(res)); // { value: 1, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: 2, done: false }
asyncGen.next().then((res) => console.log(res)); // { value: 3, done: false }
asyncGen.next().then((res) => console.log(res)); // { 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, weil der Generator anfänglich nichts erzeugte.
// An async task. Pretend it's doing something more useful
// in practice.
function sleep(time) {
return new Promise((resolve, reject) => {
setTimeout(resolve, time);
});
}
async function* createAsyncGenerator() {
while (true) {
await sleep(500);
const value = yield;
console.log(value);
}
}
async function main() {
const asyncGen = createAsyncGenerator();
// No log at this step: the first value sent through `next` is lost
console.log(await asyncGen.next(1)); // { value: undefined, done: false }
// Logs 2: the value sent through `next`
console.log(await asyncGen.next(2)); // { value: undefined, done: false }
}
main();
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-asyncgenerator-prototype-next |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
async function*
- Iteratoren und Generatoren Leitfaden