12

Ich begann mit async/await ES7-Funktionen in meiner Js-Anwendungen (transpiled von Babel).ES2017 Async/erwarten Funktionen - funktionieren sie nur mit Versprechungen?

Korrigieren Sie mich wenn falsch, aber funktionieren sie nur mit Promises? Wenn ja, bedeutet das, dass ich reguläre Callback-Funktionen in Promises einbinden muss (was ich gerade tue).

+0

Es funktioniert auch mit thenables :-) – Bergi

+0

@Bergi sind thenables eine Obermenge der Versprechungen? Ich habe sie nie als getrennte Entitäten betrachtet. – Mathletics

+0

@Bergi, die Versprechen sind :) – Kosmetika

Antwort

9

Die aktuelle (und wahrscheinlich endgültig) async/await Vorschlag erwartet Versprechungen und desugars in so etwas wie die drossel Promise.coroutine mit await den Teil des yield spielen.

Dies ist sinnvoll, da Versprechen einen Wert + Zeit darstellen und Sie darauf warten, dass dieser Wert verfügbar wird. Hinweis: await wartet auf Versprechen wie Konstrukte in allen anderen Sprachen wie C# oder Python (3.5 +).

Beachten Sie, dass das Konvertieren von Callback-APIs in Versprechungen sehr einfach ist, und einige Bibliotheken bieten Tools in einem einzigen Befehl an. Weitere Informationen finden Sie unter How to convert an existing callback API to promises.

+0

Ja, ich stimme zu, dass es einfach zu wechseln ist, war meine Verwirrung wegen http://StackOverflow.com/Questions/31294521/es7-Async-Await-Funktions-do -sie-nur-arbeiten-mit-Versprechen/31294633 # comment50580127_31294633 – Kosmetika

1

Ja, Sie await ein Versprechen.

async function myFunction() { 
    let result = await somethingThatReturnsAPromise(); 
    console.log(result); // cool, we have a result 
} 

http://pouchdb.com/2015/03/05/taming-the-async-beast-with-es7.html

+0

Ich habe gerade festgestellt, dass wenn Sie Anfrage https://github.com/request/request und tun 'erwarten request.get ('url')' es wird Antwort Körper. Bedeutet das, dass Request-Lib-Methoden nicht nur Callback-basiert sind? – Kosmetika

+0

@Kosmetika können Sie nicht direkt auf die Anfrage-Bibliothek warten, aber Sie können es leicht 'PromisifyAll' es und verwenden Sie es mit Versprechen mit sehr geringen Leistungsaufwand. –

+0

@BenjaminGruenbaum aber es wartet, ohne zu verkünden, dass meine Verwirrung verursacht hat! – Kosmetika