Ich habe bereits ECMAScript 6- und ECMAScript 7-Funktionen (dank Babel) in meinen Anwendungen verwendet - sowohl für Mobilgeräte als auch für das Internet.
Der erste Schritt war offensichtlich die ECMAScript 6-Ebene. Ich habe viele asynchrone Muster gelernt, die Versprechen (die wirklich vielversprechend sind), Generatoren (nicht sicher, warum das * -Symbol) usw. Von diesen passten Versprechen ziemlich gut zu meinem Zweck. Und ich habe sie in meinen Anwendungen ziemlich oft verwendet.
Hier ist ein Beispiel / Pseudocode, wie ich ein grundlegendes Versprechen umgesetzt habe.
var myPromise = new Promise(
function (resolve,reject) {
var x = MyDataStore(myObj);
resolve(x);
});
myPromise.then(
function (x) {
init(x);
});
Als die Zeit verging, stieß ich auf ECMAScript 7 - Features und einer von ihnen ASYNC
und AWAIT
Schlüsselwörter / Funktionen. Diese zusammen bewirken große Wunder. Ich habe begonnen, einige meiner Versprechen durch zu ersetzen async & await
. Sie scheinen dem Programmierstil einen großen Mehrwert zu verleihen.
Auch hier ist ein Pseudocode, wie meine asynchrone Wartefunktion aussieht:
async function myAsyncFunction (myObj) {
var x = new MyDataStore(myObj);
return await x.init();
}
var returnVal = await myAsyncFunction(obj);
Abgesehen von den Syntaxfehlern (falls vorhanden) tun beide genau das, was ich fühle. Ich habe es fast geschafft, die meisten meiner Versprechen durch asynchrone zu ersetzen.
Warum ist Async, Warten erforderlich, wenn Versprechen einen ähnlichen Job machen?
Löst Async, Warten ein größeres Problem? Oder war es nur eine andere Lösung, um die Hölle zurückzurufen?
Wie ich bereits sagte, kann ich Versprechen verwenden und asynchron warten, um das gleiche Problem zu lösen. Gibt es etwas Spezielles, das asynchron gelöst werden kann?
Zusätzliche Bemerkungen:
Ich habe Async, Warten und Versprechen in meinen React-Projekten und Node.js-Modulen ausgiebig verwendet. Reagieren war besonders ein Frühaufsteher und hat viele Funktionen von ECMAScript 6 und ECMAScript 7 übernommen.
Antworten:
async/await
gibt Ihnen einfach ein synchrones Gefühl für asynchronen Code. Es ist eine sehr elegante Form von syntaktischem Zucker.Bei einfachen Abfragen und Datenmanipulationen kann Promises einfach sein. Wenn Sie jedoch auf Szenarien stoßen, in denen komplexe Datenmanipulationen stattfinden und was nicht, ist es einfacher zu verstehen, was vor sich geht, wenn der Code einfach so aussieht, als wäre er synchron ( anders ausgedrückt: Die Syntax an und für sich ist eine Form der "zufälligen Komplexität",
async/await
die sich umgehen kann.Wenn Sie interessiert sind, können Sie eine Bibliothek wie
co
(neben Generatoren) verwenden, um das gleiche Gefühl zu vermitteln. Solche Dinge wurden entwickelt, um das Problem zu lösen, dasasync/await
letztendlich (nativ) gelöst wird.quelle
Async / Await bietet in komplexeren Szenarien eine viel schönere Syntax. Insbesondere alles, was sich mit Schleifen oder bestimmten anderen Konstrukten wie
try
/ befasstcatch
.Beispielsweise:
Dieses Beispiel wäre nur mit Promises wesentlich komplizierter.
quelle
const getValue = value => value || operation1().then(operation2).then(getValue);
Das Erste, was Sie verstehen müssen, ist, dass
async
/await
syntax nur syntaktischer Zucker ist, der Versprechen erhöhen soll. Tatsächlich ist der Rückgabewert einerasync
Funktion ein Versprechen.async
Dieawait
Syntax / gibt uns die Möglichkeit, asynchron synchron zu schreiben. Hier ist ein Beispiel:Versprechen Verkettung:
Async
Funktion:Im obigen Beispiel wird darauf
await
gewartet, dass das Versprechen (fetch(url)
) entweder aufgelöst oder abgelehnt wird. Wenn das Versprechen aufgelöst wird, wird der Wert in derresponse
Variablen gespeichert , und wenn das Versprechen abgelehnt wird, wird ein Fehler ausgegeben und somit dercatch
Block eingegeben .Wir können bereits sehen, dass die Verwendung von
async
/await
möglicherweise besser lesbar ist als die Verkettung von Versprechen. Dies gilt insbesondere dann, wenn die Anzahl der Versprechen, die wir verwenden, zunimmt. Beide Versprechen Verkettungs undasync
/await
lösen das Problem der Callback - Hölle und welche Methode Sie wählen , ist Frage des persönlichen Geschmacks.quelle
Vollständiger Vergleich mit Vor- und Nachteilen.
Einfaches JavaScript
Async (Bibliothek)
Versprechen
Generatoren
Async warten
quelle
Async / await kann dazu beitragen, Ihren Code sauberer und lesbarer zu machen, wenn Sie einen komplizierten Kontrollfluss benötigen. Es erzeugt auch debug-freundlicheren Code. Und macht es möglich, sowohl synchrone als auch asynchrone Fehler mit just zu behandeln
try/catch
.Ich habe kürzlich diesen Beitrag geschrieben, der die Vorteile von async / await gegenüber Versprechungen in einigen gängigen Anwendungsfällen anhand von Codebeispielen zeigt: 6 Gründe, warum JavaScript Async / Await Versprechen wegbläst (Tutorial)
quelle