Verstehen der Beziehung zwischen asynchronen Funktionen und Versprechen
In JavaScript vereinfachen asynchrone Funktionen die asynchrone Programmierung, indem sie es Ihnen ermöglichen, Code zu schreiben, der dabei synchron erscheint es wird asynchron ausgeführt. Es kann jedoch von entscheidender Bedeutung sein, zu verstehen, wie asynchrone Funktionen mit Versprechen interagieren.
Das Problem
Betrachten Sie die folgende asynchrone Funktion:
async function latestTime() { const bl = await web3.eth.getBlock('latest'); console.log(bl.timestamp); // Returns a primitive console.log(typeof bl.timestamp.then == 'function'); // Returns false - not a promise return bl.timestamp; }
Wenn Sie Wenn Sie „laestTime()“ aufrufen, können Sie davon ausgehen, dass Sie den primitiven Wert des Zeitstempels von web3.eth.getBlock erhalten. Stattdessen erhalten Sie jedoch ein ausstehendes Versprechen, wie durch Folgendes angezeigt:
const time = latestTime(); // Promise { <pending> }
Warum ein Versprechen zurückgegeben wird
Asynchrone Funktionen geben immer ein Versprechen zurück. Dieses Versprechen wird erfüllt, wenn die Funktion ihren asynchronen Vorgang abschließt und den endgültigen Wert bereitstellt oder mit einem Fehler ablehnt. Im Fall von „laestTime()“ wird das Versprechen mit dem Zeitstempel-Grundelement abgerechnet.
Wie man mit dem Versprechen umgeht
Außerhalb einer anderen asynchronen Funktion können Sie die verwenden Dann Methode auf dem Versprechen, auf den aufgelösten Wert zuzugreifen oder etwaige Fehler zu behandeln:
latestTime() .then(time => { console.log(time); }) .catch(error => { // Handle/report error });
Top-Level Warten
Moderne Umgebungen unterstützen das Warten auf oberster Ebene in Modulen, sodass Sie Code wie diesen schreiben können:
const time = await latestTime();
Diese Syntax vereinfacht die Arbeit mit Versprechen auf Modulebene. Bedenken Sie jedoch, dass unbehandelte Versprechenablehnungen in Modulen dazu führen können, dass das Modul nicht geladen werden kann.
Asynchrone Funktionen mit Versprechen verstehen
Um besser zu verstehen, wie asynchrone Funktionen in Verbindung funktionieren Bei Versprechen ist es hilfreich zu überlegen, wie die JavaScript-Engine Ihre asynchrone Funktion in einen Versprechen-Executor kompiliert Funktion:
function latestTime() { return new Promise((resolve, reject) => { web3.eth.getBlock('latest') .then(bl => { console.log(bl.timestamp); console.log(typeof bl.timestamp.then == 'function'); resolve(bl.timestamp); }) .catch(reject); }); }
In dieser Darstellung:
Infolgedessen gibt die asynchrone Funktion effektiv ein Versprechen an den aufrufenden Code zurück.
Das obige ist der detaillierte Inhalt vonWie geben asynchrone Funktionen in JavaScript immer ein Versprechen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!