| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/AsyncGenerator/return | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Januar 2020 browserbergreifend verfgbar.
Die return()-Methode von AsyncGenerator-Instanzen wirkt so, als ob eine return-Anweisung an der aktuellen Stelle des angehaltenen Generator-Krpers eingesetzt wird. Dies beendet den Generator und ermglicht es diesem, alle Aufrumarbeiten durchzufhren, wenn er mit einem try...finally-Block kombiniert wird.
asyncGeneratorInstance.return()
asyncGeneratorInstance.return(value)
value OptionalDer zurckzugebende Wert.
Ein Promise, das mit einem Object aufgelst wird, das zwei Eigenschaften hat:
doneEin boolescher Wert:
true, wenn der Kontrollfluss der Generatorfunktion das Ende erreicht hat.false, wenn der Kontrollfluss der Generatorfunktion das Ende nicht erreicht hat und noch mehr Werte erzeugen kann. Dies kann nur passieren, wenn das return in einem try...finally eingefangen wird und es mehr yield-Ausdrcke im finally-Block gibt.valueDer Wert, der als Argument bergeben wird, oder, wenn der yield-Ausdruck in einem try...finally eingeschlossen ist, der aus dem finally-Block zurckgegebene/geyieldete Wert.
Die return()-Methode kann, wenn sie aufgerufen wird, so betrachtet werden, als ob eine return value;-Anweisung an der aktuellen Stelle des angehaltenen Generator-Krpers eingefgt wird, wobei value der Wert ist, der an die return()-Methode bergeben wird. Daher wird normalerweise beim Aufruf von return(value) { done: true, value: value } zurckgegeben. Ist der yield-Ausdruck jedoch in einem try...finally-Block eingeschlossen, verlsst der Kontrollfluss den Funktionskrper nicht sofort, sondern fhrt mit dem finally-Block fort. In diesem Fall kann der zurckgegebene Wert unterschiedlich sein, und done kann sogar false sein, wenn es noch mehr yield-Ausdrcke innerhalb des finally-Blocks gibt.
Das folgende Beispiel zeigt einen asynchronen Generator und die Verwendung der return-Methode.
// 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.return("foo").then((res) => console.log(res)); // { value: "foo", done: true }
asyncGen.next().then((res) => console.log(res)); // { value: undefined, done: true }
Wenn kein value-Argument an die return()-Methode bergeben wird, wird das Promise aufgelst, als ob die next()-Methode aufgerufen wurde. In diesem Beispiel ist der Generator abgeschlossen, sodass der zurckgegebene Wert undefined ist.
return() kann weiterhin aufgerufen werden, nachdem der Generator in einem "abgeschlossenen" Zustand ist, allerdings bleibt der Generator in diesem Zustand.
async function* createAsyncGenerator() {
yield Promise.resolve(1);
yield await Promise.resolve(2);
yield 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 }
// value is returned undefined, as no value is passed and generator is 'done'
asyncGen.return().then((res) => console.log(res)); // { value: undefined, done: true }
// we can still return a value once the generator is complete
asyncGen.return(1).then((res) => console.log(res)); // { value: 1, done: true }
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-asyncgenerator-prototype-return |
async function*AsyncGeneratorAsyncIteratorObject/FunctionDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |