Heim >Web-Frontend >js-Tutorial >Wie geben asynchrone Funktionen in JavaScript immer ein Versprechen zurück?

Wie geben asynchrone Funktionen in JavaScript immer ein Versprechen zurück?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-20 11:50:09380Durchsuche

How Do Async Functions in JavaScript Always Return a Promise?

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:

  • Die asynchrone Funktion wird als Promise-Executor-Funktion dargestellt, die an neues Promise übergeben wird.
  • Der asynchrone Vorgang beginnt, wenn web3.eth.getBlock wird synchron aufgerufen.
  • Promise-Callbacks werden verwendet, um das Problem aufzulösen oder abzulehnen Versprechen.

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!

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