2016-08-08 28 views
3

Ich habe ein wenig mit async/warten und einen Wert von einem Versprechen zurückgeben.Versprechen Versprechen in async/erwarten

function test() { 
    return new Promise((resolve, reject) => { 
    resolve('Hello') 
    }) 
} 

async function c() { 
    await test() 
} 

Wie ich die Dinge verstanden soll ich in der Lage sein, einen Wert zu erhalten, indem Sie:

console.log(c()) 

Aber klar bin ich dabei einen Punkt hier, da dies ein Versprechen zurück. Soll nicht "Hallo" gedruckt werden? In einer ähnlichen Anmerkung ist mir unklar, ob ein Rückruf in eine Zusage umgewandelt werden muss, bevor er in async verpackt wird/wartet?

+0

gut, nein, Async/erwarten mag nicht asynchronen Code synchron laufen lassen. Code außerhalb der Async-Funktion muss immer noch auf den Abschluss der Async-Funktion warten. –

Antwort

7

Ich vermisse hier einen Punkt, da dies ein Versprechen zurückgibt. Sollte nicht console.log(c()) "Hallo" drucken?

Nein, async Funktionen immer versprechen Versprechen. Sie laufen nicht synchron asynchronen Code synchron ab - im Gegenteil, sie wandeln synchronen Code (wenngleich mit await Keywords gesprenkelt) in asynchron laufenden ein.

Sie können den Ergebniswert innerhalb die asynchrone Funktion erhalten:

async function c() { 
    const result = await test() 
    console.log(result); 
    return 'World'; 
} 
c().then(console.log); 

Ich bin unklar, ob ein Rückruf zu einer Versprechen umgewandelt werden muss, bevor es in async/await Verpackung?

Ja, Sie können await nur verspricht. Siehe How do I convert an existing callback API to promises? für die Durchführung der Konvertierung.

0

Async-Funktionen geben eine Promise zurück. Wenn die Funktion einen Fehler auslöst, wird das Versprechen abgelehnt. Wenn die Funktion einen Wert zurückgibt, wird die Promise aufgelöst.

Verwandte Themen