2015-07-08 12 views
12

Zacząłem używać funkcji ES7 async/await w moich aplikacjach js (transpiled przez Babel).ES2017 Funkcje asynchroniczne/oczekujące - czy działają tylko z obietnicami?

Popraw mnie, jeśli jest źle, ale czy działają tylko z obietnicami? Jeśli tak, oznacza to, że muszę zawijać regularne funkcje wywołania zwrotnego w obietnice (co obecnie robię btw).

+0

Działa również z akcesoriami :-) – Bergi

+0

@Bergi są dostępne jako zbiór obietnic? Nigdy nie uważałem ich za odrębne podmioty. – Mathletics

+0

@Bergi, które są obietnicami :) – Kosmetika

Odpowiedz

9

Obecny (i prawdopodobnie ostateczna) asynchroniczny/Oczekujcie propozycja czeka obietnic i desugars w coś podobnego Bluebird na Promise.coroutine z await grając rolę yield.

Ma to sens, ponieważ obietnice reprezentują wartość + czas i czekasz, aż ta wartość stanie się dostępna. Uwaga: await oczekuje również na obietnicę, taką jak konstrukcje we wszystkich innych językach, które zawierają ją w stylu C# lub Python (3.5+).

Należy zauważyć, że konwersja API wywołania zwrotnego na obietnice jest bardzo prosta, a niektóre biblioteki oferują narzędzia do tego w ramach jednego polecenia. Aby uzyskać więcej informacji, zobacz How to convert an existing callback API to promises.

+0

Tak, zgadzam się, że łatwo jest zmienić, moje zamieszanie było spowodowane zobaczeniem - http://stackoverflow.com/questions/31294521/es7-async-await-functions-do -they-work-only-with-promises/31294633 # comment50580127_31294633 – Kosmetika

1

Tak, ty await obietnica.

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

Właśnie zauważyłem, że jeśli używasz żądania https://github.com/request/request i robisz 'await request.get ('url')' to zwróci treść odpowiedzi. Czy to oznacza, że ​​metody pobierania żądań nie opierają się tylko na wywołaniu zwrotnym? – Kosmetika

+0

@Kosmetika nie można bezpośrednio czekać na bibliotekę żądań, ale można ją łatwo "promisifyAll" i używać z obietnicami o bardzo niskim obciążeniu wydajności. –

+0

@BenjaminGruenbaum, ale czeka bez wyjaśnień, które spowodowały moje zamieszanie! – Kosmetika

Powiązane problemy