Heim Web-Frontend js-Tutorial Der Unterschied zwischen js asynchronem Rückruf Async/Await und Promise, 6 Gründe, warum Async/Await Promise ersetzt

Der Unterschied zwischen js asynchronem Rückruf Async/Await und Promise, 6 Gründe, warum Async/Await Promise ersetzt

Sep 12, 2018 pm 04:45 PM
js promise

In diesem Kapitel erfahren Sie den Unterschied zwischen Async/Await und Promise im asynchronen js-Rückruf und 6 Gründe, warum Async/Await Promise ersetzt. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Was ist Async/Await?

async/await ist eine neue Art, asynchronen Code zu schreiben. Die vorherigen Methoden waren Callback-Funktionen und Promise .

async/await wird basierend auf Promise implementiert und kann nicht für normale Rückruffunktionen verwendet werden.

async/await ist wie Promise nicht blockierend.

async/await lässt asynchronen Code wie synchronen Code aussehen, was seine Magie ist.

Async/Await-Syntax

Im Beispiel gibt die getJSON-Funktion ein Versprechen zurück, das ein JSON-Objekt zurückgibt, wenn das Versprechen erfolgreich aufgelöst wird. Wir rufen einfach diese Funktion auf, drucken das zurückgegebene JSON-Objekt aus und geben „done“ zurück.

Versprechen zu verwenden ist so:

const makeRequest = () =>
  getJSON()
    .then(data => {
      console.log(data)
      return "done"
    })makeRequest()
Nach dem Login kopieren

Async/Await zu verwenden ist so:

const makeRequest = async () => {
  console.log(await getJSON())
  return "done"}makeRequest()
Nach dem Login kopieren

Es gibt einige kleine Unterschiede:

Es gibt mehr Funktionen vor Ein aync-Schlüsselwort. Das Schlüsselwort „await“ kann nur innerhalb von aync definierter Funktionen verwendet werden. Die asynchrone Funktion gibt implizit ein Versprechen zurück, und der Auflösungswert des Versprechens ist der Wert der Funktionsrückgabe. (Der reosolve-Wert im Beispiel ist die Zeichenfolge „done“)

Der erste Punkt impliziert, dass wir „await“ nicht im äußersten Code verwenden können, da es nicht innerhalb der asynchronen Funktion liegt.

// 不能在最外层代码中使用
awaitawait makeRequest()
// 这是会出事情的 
makeRequest().then((result) => {
  // 代码
 })
Nach dem Login kopieren

await getJSON() bedeutet, dass console.log wartet, bis das Versprechen von getJSON erfolgreich gelöst wurde, bevor es ausgeführt wird.

Warum ist Async/Await besser?

1. Einfachheit

Wie aus dem Beispiel ersichtlich ist, spart die Verwendung von Async/Await offensichtlich viel Code. Wir müssen kein .then schreiben, wir müssen keine anonymen Funktionen schreiben, um den Auflösungswert von Promise zu verarbeiten, wir müssen keine redundanten Datenvariablen definieren und wir vermeiden verschachtelten Code. Diese kleinen Vorteile summieren sich schnell, wie in den folgenden Codebeispielen deutlicher wird.

2. Fehlerbehandlung

Async/Await ermöglicht die Behandlung von synchronen und asynchronen Fehlern durch Try/Catch. Im folgenden Promise-Beispiel kann try/catch den JSON.parse-Fehler nicht verarbeiten, da er innerhalb des Promise liegt. Wir müssen .catch verwenden, damit der Fehlerbehandlungscode sehr redundant ist. Darüber hinaus wird unser eigentlicher Produktionscode komplizierter sein.

const makeRequest = () => {
  try {
    getJSON()
      .then(result => {
        // JSON.parse可能会出错
        const data = JSON.parse(result)
        console.log(data)
      })
      // 取消注释,处理异步代码的错误
      // .catch((err) => {
      //   console.log(err)
      // })
  } catch (err) {
    console.log(err)
  }}
Nach dem Login kopieren

Wenn Sie aync/await verwenden, kann Catch JSON.parse-Fehler verarbeiten:

const makeRequest = async () => {
  try {
    // this parse may fail
    const data = JSON.parse(await getJSON())
    console.log(data)
  } catch (err) {
    console.log(err)
  }}
Nach dem Login kopieren

3. Bedingte Anweisung

Im folgenden Beispiel müssen Sie die Daten abrufen und geben Sie dann die Daten entsprechend zurück. Entscheiden Sie, ob Sie direkt zurückkehren oder weiterhin weitere Daten abrufen möchten. ·

const makeRequest = () => {
  return getJSON()
    .then(data => {
      if (data.needsAnotherRequest) {
        return makeAnotherRequest(data)
          .then(moreData => {
            console.log(moreData)
            return moreData          })
      } else {
        console.log(data)
        return data      }
    })}
Nach dem Login kopieren

Diese Codes bereiten mir schon beim Anblick Kopfschmerzen. Es kann leicht zu Verwechslungen mit Verschachtelungen (6 Ebenen), Klammern und Rückgabeanweisungen kommen, die nur das Endergebnis an das äußerste Versprechen übergeben müssen.

Der obige Code wurde mit async/await geschrieben, was die Lesbarkeit erheblich verbessern kann:

const makeRequest = async () => {
  const data = await getJSON()
  if (data.needsAnotherRequest) {
    const moreData = await makeAnotherRequest(data);
    console.log(moreData)
    return moreData  } else {
    console.log(data)
    return data    
  }}
Nach dem Login kopieren

Zwischenwert

Sie sind wahrscheinlich auf ein solches Szenario gestoßen, das Promise1 aufruft, Verwenden Sie das von Promise1 zurückgegebene Ergebnis, um Promise2 aufzurufen, und verwenden Sie dann die Ergebnisse beider, um Promise3 aufzurufen. Ihr Code sieht wahrscheinlich so aus:

const makeRequest = () => {
  return promise1()
    .then(value1 => {
      return promise2(value1)
        .then(value2 => {        
          return promise3(value1, value2)
        })
    })}
Nach dem Login kopieren

Wenn Promise3 keinen Wert1 erfordert, können Sie die Promises einfach flach verschachteln. Wenn Sie eine Verschachtelung nicht ertragen können, können Sie die Werte 1 und 2 in Promise.all einfügen, um eine tiefe Verschachtelung zu vermeiden:

const makeRequest = () => {
  return promise1()
    .then(value1 => {
      return Promise.all([value1, promise2(value1)])
    })
    .then(([value1, value2]) => {      
      return promise3(value1, value2)
    })}
Nach dem Login kopieren

Dieser Ansatz opfert die Semantik zugunsten der Lesbarkeit. Es gibt keinen anderen Grund, Wert1 und Wert2 in ein Array einzufügen, als eine Verschachtelung zu vermeiden.

Wenn Sie async/await verwenden, wird der Code extrem einfach und intuitiv.

const makeRequest = async () => {
  const value1 = await promise1()
  const value2 = await promise2(value1)
  return promise3(value1, value2)}
Nach dem Login kopieren

5. Fehlerstapel

Im folgenden Beispiel werden mehrere Versprechen aufgerufen. Angenommen, irgendwo in der Versprechenskette wird ein Fehler ausgegeben:

const makeRequest = () => {
  return callAPromise()
    .then(() => callAPromise())
    .then(() => callAPromise())
    .then(() => callAPromise())
    .then(() => callAPromise())
    .then(() => {
      throw new Error("oops");
    })}makeRequest()
  .catch(err => {
    console.log(err);
    // output
    // Error: oops at callAPromise.then.then.then.then.then (index.js:8:13)
  })
Nach dem Login kopieren

Rückkehr von der Versprechenskette Der Fehlerstapel gibt keinen Hinweis darauf, wo der Fehler aufgetreten ist. Schlimmer noch, es ist irreführend; die einzige Funktion im Fehlerstapel heißt callAPromise, was nichts mit dem Fehler zu tun hat. (Der Dateiname und die Zeilennummer sind weiterhin nützlich).

Allerdings zeigt der Fehlerstapel in async/await auf die Funktion, in der sich der Fehler befindet:

const makeRequest = async () => {
  await callAPromise()
  await callAPromise()
  await callAPromise()
  await callAPromise()
  await callAPromise()
  throw new Error("oops");}makeRequest()
  .catch(err => {
    console.log(err);
    // output
    // Error: oops at makeRequest (index.js:7:9)
  })
Nach dem Login kopieren

In einer Entwicklungsumgebung ist dieser Vorteil nicht groß. Es ist jedoch sehr nützlich, wenn Sie das Fehlerprotokoll der Produktionsumgebung analysieren. Zu diesem Zeitpunkt ist es besser zu wissen, dass der Fehler in makeRequest aufgetreten ist, als zu wissen, dass der Fehler in der Then-Kette aufgetreten ist.

6. Debuggen

Der letzte und sehr wichtige Punkt ist, dass async/await das Code-Debuggen erleichtern kann. 2 Gründe, warum das Debuggen von Promises mühsam ist:

1) Sie können keine Haltepunkte in Pfeilfunktionen setzen, die Ausdrücke zurückgeben

Der Unterschied zwischen js asynchronem Rückruf Async/Await und Promise, 6 Gründe, warum Async/Await Promise ersetzt

2) Wenn Sie einen Haltepunkt setzen den .then-Codeblock und verwenden Sie die Tastenkombination „Step Over“. Der Debugger springt nicht zum nächsten .then, da er nur den asynchronen Code überspringt.

Bei Verwendung von „await/async“ benötigen Sie nicht mehr so ​​viele Pfeilfunktionen, sodass Sie „await“-Anweisungen überspringen können, genau wie beim Debuggen von synchronem Code

Der Unterschied zwischen js asynchronem Rückruf Async/Await und Promise, 6 Gründe, warum Async/Await Promise ersetzt

Fazit

Async/Await ist eine der revolutionärsten Funktionen, die in den letzten Jahren zu JavaScript hinzugefügt wurden. Es wird Ihnen klar machen, wie schlecht die Promise-Syntax ist, und Ihnen eine intuitive Alternative bieten.

Sorge

Vielleicht haben Sie berechtigte Zweifel an Async/Await:
Dadurch wird asynchroner Code weniger offensichtlich: Wir sind es gewohnt, Callback-Funktionen oder .then zu verwenden, um asynchronen Code zu identifizieren, und es kann mehrere Wochen dauern, bis wir uns an das neue Flag gewöhnt haben. C# verfügt jedoch schon seit vielen Jahren über diese Funktion, und Freunde, die damit vertraut sind, sollten wissen, dass sich die vorübergehende Unannehmlichkeit lohnt.
Node 7 ist kein LTS (Long-Term-Support-Release): Node 8 wird jedoch nächsten Monat veröffentlicht und die Migration Ihres Codes auf die neue Version wird sehr einfach sein.

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen js asynchronem Rückruf Async/Await und Promise, 6 Gründe, warum Async/Await Promise ersetzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie JS und Baidu Maps, um die Kartenschwenkfunktion zu implementieren So verwenden Sie JS und Baidu Maps, um die Kartenschwenkfunktion zu implementieren Nov 21, 2023 am 10:00 AM

So implementieren Sie die Kartenschwenkfunktion mit JS und Baidu Map. Baidu Map ist eine weit verbreitete Kartendienstplattform, die häufig zur Anzeige geografischer Informationen, Positionierung und anderer Funktionen in der Webentwicklung verwendet wird. In diesem Artikel wird erläutert, wie Sie mit JS und der Baidu Map API die Kartenschwenkfunktion implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Vorbereitung Bevor Sie die Baidu Map API nutzen können, müssen Sie zunächst ein Entwicklerkonto auf der Baidu Map Open Platform (http://lbsyun.baidu.com/) beantragen und eine Anwendung erstellen. Erstellung abgeschlossen

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Dec 17, 2023 pm 06:55 PM

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen in PHP und JS. Mit der rasanten Entwicklung des Internets und der Technologie ist der Aktienhandel für viele Anleger zu einer wichtigen Möglichkeit geworden. Die Aktienanalyse ist ein wichtiger Teil der Anlegerentscheidung, und Kerzendiagramme werden häufig in der technischen Analyse verwendet. Wenn Sie lernen, wie man Kerzendiagramme mit PHP und JS zeichnet, erhalten Anleger intuitivere Informationen, die ihnen helfen, bessere Entscheidungen zu treffen. Ein Candlestick-Chart ist ein technischer Chart, der Aktienkurse in Form von Candlesticks anzeigt. Es zeigt den Aktienkurs

So erstellen Sie ein Aktien-Candlestick-Diagramm mit PHP und JS So erstellen Sie ein Aktien-Candlestick-Diagramm mit PHP und JS Dec 17, 2023 am 08:08 AM

So verwenden Sie PHP und JS zum Erstellen eines Aktienkerzendiagramms. Ein Aktienkerzendiagramm ist eine gängige technische Analysegrafik auf dem Aktienmarkt. Es hilft Anlegern, Aktien intuitiver zu verstehen, indem es Daten wie den Eröffnungskurs, den Schlusskurs, den Höchstkurs usw niedrigster Preis der Aktie. In diesem Artikel erfahren Sie anhand spezifischer Codebeispiele, wie Sie Aktienkerzendiagramme mit PHP und JS erstellen. 1. Vorbereitung Bevor wir beginnen, müssen wir die folgende Umgebung vorbereiten: 1. Ein Server, auf dem PHP 2. Ein Browser, der HTML5 und Canvas 3 unterstützt

So verwenden Sie JS und Baidu Maps, um die Karten-Heatmap-Funktion zu implementieren So verwenden Sie JS und Baidu Maps, um die Karten-Heatmap-Funktion zu implementieren Nov 21, 2023 am 09:33 AM

Verwendung von JS und Baidu Maps zur Implementierung der Karten-Heatmap-Funktion Einführung: Mit der rasanten Entwicklung des Internets und mobiler Geräte sind Karten zu einem häufigen Anwendungsszenario geworden. Als visuelle Darstellungsmethode können Heatmaps uns helfen, die Verteilung von Daten intuitiver zu verstehen. In diesem Artikel wird die Verwendung von JS und der Baidu Map API zur Implementierung der Karten-Heatmap-Funktion vorgestellt und spezifische Codebeispiele bereitgestellt. Vorbereitung: Bevor Sie beginnen, müssen Sie Folgendes vorbereiten: ein Baidu-Entwicklerkonto, eine Anwendung erstellen und den entsprechenden AP erhalten

So verwenden Sie JS und Baidu Map, um die Funktion zur Verarbeitung von Kartenklickereignissen zu implementieren So verwenden Sie JS und Baidu Map, um die Funktion zur Verarbeitung von Kartenklickereignissen zu implementieren Nov 21, 2023 am 11:11 AM

Überblick über die Verwendung von JS und Baidu Maps zum Implementieren von Funktionen zur Verarbeitung von Kartenklickereignissen: In der Webentwicklung ist es häufig erforderlich, Kartenfunktionen zum Anzeigen des geografischen Standorts und geografischer Informationen zu verwenden. Die Verarbeitung von Klickereignissen auf der Karte ist ein häufig verwendeter und wichtiger Teil der Kartenfunktion. In diesem Artikel wird erläutert, wie Sie mithilfe von JS und der Baidu-Karten-API die Klickereignisverarbeitungsfunktion der Karte implementieren, und es werden spezifische Codebeispiele angegeben. Schritte: Importieren Sie die API-Datei von Baidu Map. Importieren Sie zunächst die Datei von Baidu Map API in die HTML-Datei.

Halten Sie Ihr Wort: Die Vor- und Nachteile der Einhaltung Ihrer Versprechen Halten Sie Ihr Wort: Die Vor- und Nachteile der Einhaltung Ihrer Versprechen Feb 18, 2024 pm 08:06 PM

Im täglichen Leben stoßen wir oft auf Probleme zwischen Versprechen und Erfüllung. Ob in einer persönlichen Beziehung oder einer Geschäftstransaktion: Das Einhalten von Versprechen ist der Schlüssel zum Aufbau von Vertrauen. Allerdings sind die Vor- und Nachteile eines Engagements oft umstritten. In diesem Artikel werden die Vor- und Nachteile von Verpflichtungen untersucht und einige Ratschläge gegeben, wie Sie Ihr Wort halten können. Die versprochenen Vorteile liegen auf der Hand. Erstens schafft Engagement Vertrauen. Wenn jemand sein Wort hält, lässt er andere glauben, dass er eine vertrauenswürdige Person ist. Vertrauen ist die Bindung zwischen Menschen, die Menschen mehr machen kann

PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen Dec 18, 2023 pm 03:39 PM

Mit der rasanten Entwicklung der Internetfinanzierung sind Aktieninvestitionen für immer mehr Menschen zur Wahl geworden. Im Aktienhandel sind Kerzendiagramme eine häufig verwendete Methode der technischen Analyse. Sie können den sich ändernden Trend der Aktienkurse anzeigen und Anlegern helfen, genauere Entscheidungen zu treffen. In diesem Artikel werden die Entwicklungskompetenzen von PHP und JS vorgestellt, der Leser wird zum Verständnis des Zeichnens von Aktienkerzendiagrammen geführt und es werden spezifische Codebeispiele bereitgestellt. 1. Aktien-Kerzendiagramme verstehen Bevor wir uns mit dem Zeichnen von Aktien-Kerzendiagrammen befassen, müssen wir zunächst verstehen, was ein Kerzendiagramm ist. Candlestick-Charts wurden von den Japanern entwickelt

See all articles