Asynchrone Funktionen: Implizite Versprechensrückgabe oder explizite Kontrolle?
Asynchrone Funktionen in JavaScript, die durch das Schlüsselwort async gekennzeichnet sind, werden oft implizit genannt Rückgabeversprechen. Eine genauere Betrachtung zeigt jedoch, dass die Realität differenzierter ist.
Standardmäßig gibt eine asynchrone Funktion tatsächlich ein Versprechen zurück, wenn ein Versprechen nicht explizit zurückgegeben wird. Das bedeutet, dass der folgende Code:
async function getVal() { const result = await doSomethingAsync(); return result; }
äquivalent ist zu:
async function getVal() { const result = await doSomethingAsync(); return Promise.resolve(result); }
Wenn Sie jedoch explizit einen nicht versprochenen Wert zurückgeben, wird die Funktion ihn automatisch in ein Versprechen einschließen . Zum Beispiel im folgenden Beispiel:
async function getVal() { return doSomethingNonAsync(); }
getVal gibt tatsächlich ein Promise-Objekt zurück, das das Ergebnis von doSomethingNonAsync() enthält.
Es ist erwähnenswert, dass sich dieses Verhalten von herkömmlichen JavaScript-Funktionen unterscheidet. Wenn Sie explizit einen primitiven Wert von einer regulären Funktion zurückgeben, wird dieser sofort zurückgegeben. Asynchrone Funktionen geben jedoch immer ein Versprechen zurück und verpacken nicht versprochene Werte nach Bedarf.
Dies mag inkonsistent erscheinen, passt aber zum Konzept der Generatoren in ES6. Generatoren sind Funktionen, die nicht denselben Wert wie ihre Return-Anweisung zurückgeben. Stattdessen liefern sie eine Reihe von Werten, die mit dem Yield-Operator iteriert werden können.
Zum Beispiel:
function* getVal() { yield doSomethingAsync(); return 'finished'; } // Logs an object. console.log(getVal()); // Logs 'yikes' and then 'finished'. for (const val of getVal()) { console.log(val); }
Das obige ist der detaillierte Inhalt vonAsynchrone Funktionen in JavaScript: Implizites Versprechen oder expliziter Rückgabewert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!