Heim >Web-Frontend >js-Tutorial >Geben asynchrone Funktionen immer Versprechen zurück?

Geben asynchrone Funktionen immer Versprechen zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-25 02:09:12817Durchsuche

Do Async Functions Always Return Promises?

Frage: Geben asynchrone Funktionen implizit Versprechen zurück?

In JavaScript werden asynchrone Funktionen mit dem Schlüsselwort async deklariert und werden häufig automatisch ausgeführt Rückgabeversprechen. Dies führt jedoch zu einer potenziellen Inkonsistenz: Wenn ein Wert, der kein Versprechen ist, explizit zurückgegeben wird, scheint die Funktion den Wert in ein Versprechen zu verpacken.

Antwort: Alle asynchronen Funktionen geben Versprechen zurück

Das beobachtete Verhalten ist korrekt: Alle asynchronen Funktionen geben implizit Versprechen zurück. Im Einzelnen:

  • Wenn eine asynchrone Funktion ohne explizite Return-Anweisung zurückkehrt, gibt sie ein Versprechen zurück, das in „undefiniert“ aufgelöst ist.
  • Wenn eine asynchrone Funktion explizit einen Nicht-Versprechenswert zurückgibt, wird ein Wrapping durchgeführt Der Wert in einem Versprechen wurde zu diesem Wert aufgelöst.
  • Selbst wenn eine asynchrone Funktion einen Warteausdruck enthält, ist der zurückgegebene Wert immer noch ein Versprechen, das das Ergebnis des Wartens umschließt Ausdruck.
  • Wenn ein Fehler innerhalb einer asynchronen Funktion ausgelöst wird, wird das zurückgegebene Versprechen mit diesem Fehler abgelehnt.

Beispiel:

async function increment(num) {
  return num + 1;
}

// Logs 4, as the returned promise resolves to 4.
increment(3).then(num => console.log(num));

Umbruchverhalten:

Dieses Umbruchverhalten gilt nur für Generatorfunktionen. Generatorfunktionen geben beispielsweise auch Versprechen zurück, allerdings auf andere Weise:

function* foo() {
  return 'test';
}

// Logs an object, not "test".
console.log(foo());

// Logs 'test' by explicitly calling .next() on the generator function.
console.log(foo().next().value);

Das obige ist der detaillierte Inhalt vonGeben asynchrone Funktionen immer Versprechen zurück?. 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