2015-07-08 19 views
12

Ho iniziato a utilizzare le funzioni di ES2 async/await nelle mie applicazioni js (traspolate da Babel).ES2017 Funzioni asincrone/attese: funzionano solo con le promesse?

Correggimi se sbagliato, ma funzionano solo con Promises? Se sì, questo significa che ho bisogno di avvolgere le normali funzioni di callback in Promises (cosa sto facendo attualmente btw).

+0

Funziona anche con il tema :-) – Bergi

+0

@Bergi sono un simbolo di promesse? Non li avevo mai considerati entità separate. – Mathletics

+0

@Bergi quali sono le promesse :) – Kosmetika

risposta

9

L'attuale (e probabilmente ultima) async/await proposta attende promesse e desugars in qualcosa di simile Bluebird di Promise.coroutine con await nel ruolo di yield.

Questo ha senso, poiché le promesse rappresentano un valore + tempo e stai aspettando che quel valore diventi disponibile. Nota: await attende anche costrutti simili in tutti gli altri linguaggi che lo includono come C# o Python (3.5+).

Si noti che la conversione delle API di callback in promesse è molto semplice e alcune librerie offrono strumenti per farlo in un unico comando. Vedi How to convert an existing callback API to promises per maggiori dettagli.

+0

Sì, sono d'accordo che è facile da cambiare, la mia confusione era dovuta a vedere - http://stackoverflow.com/questions/31294521/es7-async-await-functions-do promesse -hanno-lavoro-solo-con-/ 31294633 # comment50580127_31294633 – Kosmetika

1

Sì, è await una promessa.

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

Ho appena notato che se si sta utilizzando la richiesta https://github.com/request/request e si esegue 'await request.get ('url')' verrà restituito il corpo della risposta. Significa che i metodi di richiesta lib non solo sono basati sulla callback? – Kosmetika

+0

@Kosmetika non è possibile attendere direttamente la libreria di richieste, ma si può facilmente "prometterlo tutto" e usarlo con promesse con un overhead delle prestazioni molto basso. –

+0

@BenjaminGruenbaum ma attende senza promettere che ciò ha causato la mia confusione! – Kosmetika

Problemi correlati