Die Besonderheiten von async/await
Vorwort
Während des Interviews ist Async/Await ein guter Indikator für das Wissen des Kandidaten. Natürlich habe ich nicht darüber nachgedacht, aus welchem Blickwinkel ich diesen Wissenspunkt erklären soll. Auf die Frage des Interviewers können Sie mit der Syntax des selbstausführenden Generators antworten. Aber habe ich es ein wenig erkannt, oder habe ich seine Erkenntnis gesehen?
Wie Babel implementiert wird
Hinweis: Wenn Sie sich mit Generator nicht auskennen, können Sie sich zuerst den Generator und übrigens auch den Iterator ansehen.
Ex-Code:
async function t() { const x = await getResult(); const y = await getResult2(); return x + y; }
Babel-Konvertierungscode
"use strict"; function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function t() { return _t.apply(this, arguments); } function _t() { _t = _asyncToGenerator(function* () { const x = yield getResult(); const y = yield getResult2(); return x + y; }); return _t.apply(this, arguments); }
Wie aus dem Code ersichtlich ist, benötigt babel
zwei Schritte, um ein generator
in ein umzuwandeln async
_asyncToGenerator
und asyncGeneratorStep
.
Was hat _asyncToGenerator
getan?
1. Der Aufruf von _asyncToGenerator
hat ein promise
zurückgegeben, was genau den Eigenschaften entspricht, mit denen die Funktion async
verbunden werden kann 🎜>. then
und definieren Sie eine fehlgeschlagene Methode _next
. In den beiden Funktionen wird _throw
aufgerufen. Nachdem Sie asyncGeneratorStep
gelesen haben, werden Sie wissen, dass es sich tatsächlich um eine Rekursion handelt. asyncGeneratorStep
. Das ist der oben erwähnte selbstausführende Generator. _next
Was hat es bewirkt?asyncGeneratorStep
zu erfassen. Wird ein Fehler gemeldet, wechselt die Funktion generator
direkt in den Status async
. reject
-Wert in info
wahr ist. Wenn er wahr ist, bedeutet dies, dass der Iterator ausgeführt wurde und der Wert done
ausgegeben werden kann. Andernfalls rufen Sie weiterhin resolve
auf, um den Wert an den nächsten zu übergeben. _next
这里我唯一没有看明白的是`_throw`,这个看代码像是执行不到的。promise.resolve状态值应该是fulfilled。看懂的 可以在评论中和我说一下,感谢。
Vorteile von async/await
Jedes Mal, wenn ein neuer syntaktischer Zucker erscheint, muss er die Mängel der Lösung der vorherigen Generation ausgleichen. Beispiel: Das Aufkommen von Versprechen besteht darin, es zu vermeiden. callback hell
Was löst async/await?
Die Notwendigkeit, Versprechen durch async/await zu ersetzenAsynchrone Synchronisation auf synchrone Weise handhabenasync/await ist näher am Synchronisationsstil, while Promise verwendet die Then-Methode, der Code wird größer und es gibt keinen großen Unterschied zwischen Async/Await- und Synchronisationsfunktionen. Es gibt jedoch immer noch eine Lücke in der Schreibmethode von Promise.
Promise- und Async/Wait-Code-Vergleich
Promise-Versionfunction getData() { getRes().then((res) => { console.log(res); }) }
const getData = async function() { const res = await getRes(); console.log(res); }
Bei der Verwendung von Versprechen werden Sie feststellen, dass es bei der Serialisierung mehrerer Versprechen sehr schwierig ist, dass das nachfolgende Versprechen den Wert des vorherigen Versprechens erhält. Und async löst genau dieses Problem. Beispiel für das Versprechen, einen Zwischenwert zu erhalten
const morePromise = () => { return promiseFun1().then((value1) => { return promiseFun2(value1).then((value2) => { return promiseFun3(value1, value2).then((res) => { console.log(res); }) }) }) }
const morePromise = () => { return promiseFun1().then((value1) => { return promiseAll([value1, promiseFun2(value1)]) }).then(([value1, value2]) => { return promiseFun3(value1, value2).then((res) => { console.log(res); }) }) }
const morePromise = async function() { const value1 = await promiseFun1(); const value2 = await promiseFun2(value1); const res = await promiseFun3(value1, valuw2); return res; }
const a = () => { return getResult().then((data) => { if(data.hasMore) { return getMoreRes(data).then((dataMore) => { return dataMore; }) } else { return data; } }) }
const a = async() => { const data = await getResult(); if(data.hasMore) { const dataMore = await getMoreRes(data); return dataMore; } else { return data; } }
const a = async function() { const res = await Promise.all[getRes1(), getRes2()]; return res; }
async/await-Fehlerbehandlung
async/await bei der Fehlererfassung zu implementieren Der Hauptaspekt ist Try-Catch.Try-Catch
const a = async () => { try{ const res = await Promise.reject(1); } catch(err) { console.log(err); } }
Promise's Catch
kann eine öffentliche Funktion extrahieren, um dies zu tun. Da auf jedes Versprechen eine Catch-Verarbeitung folgt, ist der Code sehr lang.const a = async function() { const res = await Promise.reject(1).catch((err) => { console.log(err); }) }
JS-Tutorial“
Das obige ist der detaillierte Inhalt vonDie Besonderheiten von async/await. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

Diskussion über die Realisierung von Parallaxe -Scrolling- und Elementanimationseffekten in diesem Artikel wird untersuchen, wie die offizielle Website der Shiseeido -Website (https://www.shiseeido.co.jp/sb/wonderland/) ähnlich ist ...

JavaScript zu lernen ist nicht schwierig, aber es ist schwierig. 1) Verstehen Sie grundlegende Konzepte wie Variablen, Datentypen, Funktionen usw. 2) Beherrschen Sie die asynchrone Programmierung und implementieren Sie sie durch Ereignisschleifen. 3) Verwenden Sie DOM -Operationen und versprechen Sie, asynchrone Anfragen zu bearbeiten. 4) Vermeiden Sie häufige Fehler und verwenden Sie Debugging -Techniken. 5) Die Leistung optimieren und Best Practices befolgen.

Erforschen Sie die Implementierung der Funktion des Bedien- und Drop-Einstellungsfunktion der Panel ähnlich wie VSCODE im Front-End. In der Front-End-Entwicklung wird VSCODE ähnlich wie VSCODE implementiert ...

Eingehende Diskussion der Ursachen des Unterschieds in der Konsole.log-Ausgabe. In diesem Artikel wird die Unterschiede in den Ausgabeergebnissen der Konsolenfunktion in einem Code analysiert und die Gründe dafür erläutert. � ...
