Heim >Web-Frontend >js-Tutorial >Asynchrone Funktionen in JavaScript: Implizites Versprechen oder expliziter Rückgabewert?

Asynchrone Funktionen in JavaScript: Implizites Versprechen oder expliziter Rückgabewert?

Susan Sarandon
Susan SarandonOriginal
2024-12-17 18:36:12703Durchsuche

Async Functions in JavaScript: Implicit Promise or Explicit Return Value?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn