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

Warum geben asynchrone Funktionen in JavaScript immer Versprechen zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-14 01:13:09128Durchsuche

Why Do Async Functions Always Return Promises in JavaScript?

Asynchrone Funktion gibt Versprechen statt Wert zurück

Bei der asynchronen/await-Programmierung gibt eine asynchrone Funktion immer ein Versprechen zurück. Dieses Versprechen stellt den endgültigen Abschluss der asynchronen Arbeit der Funktion dar.

Wenn Sie eine asynchrone Funktion in einem anderen asynchronen Kontext aufrufen, können Sie „await“ verwenden, um zu pausieren, bis das Versprechen erfüllt ist. In einem nicht asynchronen Kontext (häufig auf der obersten Ebene oder im Event-Handler) müssen Sie jedoch das Versprechen direkt verwenden:

latestTime()
.then(time => {
  console.log(time);
})
.catch(error => {
  // Handle/report error
});

In modernen Umgebungen wird das Warten auf oberster Ebene innerhalb von Modulen unterstützt:

const time = await latestTime();

Um es besser zu verstehen, untersuchen wir eine explizite Promise-Callback-Version Ihrer asynchronen 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 diesem Callback Version:

  • Die Promise-Executor-Funktion (an neues Promise übergeben) wird synchron ausgeführt und startet den web3.eth.getBlock-Vorgang.
  • Alle Fehler innerhalb des Promise-Executors oder der Rückrufe werden abgefangen und umgewandelt, um Ablehnungen zu versprechen.

Das obige ist der detaillierte Inhalt vonWarum geben asynchrone Funktionen in JavaScript 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