Jak można ustawić await
na async
z call
lub apply
z Babel
?Oczekiwanie na funkcję asynchronizującą wywołaną z wywołaniem lub zastosowanie z Babel
Poniżej jest przykład, gdzie jest async
getOrders
metoda klasy Service
:
class Service() {
async getOrders(arg1, arg2, arg3) {
return await this.anotherService.getOrders(arg1, arg2, arg3);
}
}
let service = new Service();
// ...
// Babel doesn't compile
// let stream = await service.getOrders.call(this, arg1, arg2, arg3);
// producing SyntaxError: Unexpected token for await
let stream = service.getOrders.call(this, arg1, arg2, arg3);
stream.pipe(res); // obviously not working without await in the prev line
UPDATE/ROZWIĄZANIE
Problem polegał na tym, że let stream = service.getOrders.call(this, arg1, arg2, arg3);
była anonimową funkcję wewnątrz regularnej funkcji. Zamiast oznaczać anonimową funkcję async
, zrobiłem to dla zwykłej funkcji powodującej Babel SyntaxError: Unexpected token
.
Dzięki @loganfsmyth za doprowadzenie mnie do rozwiązania.
Pytasz co zrobić, gdy chcesz wywołać funkcję transmisji asynchronicznej poza inną funkcją asynchroniczną? Nie jest jasne, co to ma wspólnego z call/apply/bind, lub czym "to" przechodzisz do 'call' w swoim pytaniu. – loganfsmyth
@loganfsmyth nie, pytam, jak "poczekać" na funkcję 'async' wywoływaną przez' call' lub 'apply'. – krl
Używałbyś czekania tak jak zwykle. Zaktualizowałem moją odpowiedź. – loganfsmyth