Promises sind ein grundlegender Aspekt der asynchronen Programmierung in JavaScript. Wenn es um async/await geht, ist es wichtig, die Vorstellung zu entmystifizieren, dass asynchrone Funktionen immer ein Promise zurückgeben.
Das Schlüsselwort „await“, das vor einem Promise-zurückgebenden Funktionsaufruf platziert wird, unterbricht die Ausführung der aktuellen Funktion bis zum Versprechen wird entweder gelöst oder abgelehnt. Diese Aussetzung löst jedoch nicht das Versprechen aus. Das Ergebnis des Promise ist immer noch im zurückgegebenen Promise-Objekt gekapselt.
Betrachten Sie zur Veranschaulichung den folgenden Code, der eine asynchrone Anfrage simuliert:
const getJSON = async () => { const request = () => new Promise((resolve, reject) => ( setTimeout(() => resolve({ foo: 'bar' }), 2000) )); const json = await request(); return json; };
Beim Aufruf von getJSON() wird zurückgegeben ein Versprechen, da die Wait-Anweisung lediglich die Ausführung unterbricht, bis die Anfrage abgeschlossen ist:
console.log(getJSON()); // returns Promise
Im Gegensatz dazu bei der Verkettung .then() wird das Ergebnis des Promise endlich offengelegt:
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
Warum kann man den Promise-Umbruch nicht mit console.log(getJSON()) umgehen? Dies ist eine grundlegende Eigenschaft von Promises. Versprechen stellen asynchrone Vorgänge dar und ihre Ergebnisse sind erst bekannt, wenn sie aufgelöst oder abgelehnt werden. Der externe Zugriff auf das Ergebnis wird absichtlich unterbunden, um sicherzustellen, dass das Promise der alleinige Vermittler des Ergebnisses bleibt.
Denken Sie daran, dass async/await die Arbeit mit Promises komfortabler macht, indem die Ausführung angehalten wird, wenn Promises angetroffen werden, was jedoch nicht der Fall ist Beseitigen Sie die Notwendigkeit, Versprechen auszupacken, um auf ihre Ergebnisse zuzugreifen.
Das obige ist der detaillierte Inhalt vonGibt async/await in JavaScript immer ein Versprechen zurück und warum?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!