Làm cách nào để await
trên chức năng async
được gọi là call
hoặc apply
với Babel
?Đang chờ trên một chức năng không đồng bộ được gọi với cuộc gọi hoặc áp dụng với Babel
Dưới đây là một ví dụ, nơi getOrders
là một phương pháp async
của một lớp 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/SOLUTION
Vấn đề là let stream = service.getOrders.call(this, arg1, arg2, arg3);
là trong một chức năng ẩn danh bên trong một hàm thông thường. Thay vì đánh dấu chức năng ẩn danh async
, tôi đã làm nó cho một chức năng thường xuyên gây ra Babel SyntaxError: Unexpected token
.
Nhờ @loganfsmyth đã dẫn tôi đến giải pháp.
Bạn có yêu cầu phải làm gì khi bạn muốn gọi một chức năng async bên ngoài một hàm async khác? Nó không rõ ràng những gì này đã làm với cuộc gọi/áp dụng/ràng buộc, hoặc những gì 'này' bạn đang đi đến' gọi' trong câu hỏi của bạn. – loganfsmyth
@loganfsmyth không, tôi đang hỏi cách 'chờ đợi' trên một hàm 'async' được gọi với 'call' hoặc' apply'. – krl
Bạn muốn sử dụng như bạn thường làm. Đã cập nhật câu trả lời của tôi. – loganfsmyth