Рассмотрим следующий случай:
const waitForEvent = async (api) => {
api.on('eventOne', () => {
return 'eventOne';
})
api.on('eventTwo', () => {
return 'eventTwo';
})
api.on('eventThree', () => {
return 'eventThree';
})
api.load();
}
Что я пытаюсь сделать, так это настроить обратные вызовы событий для переменной api
внутри асинхронной функции, вызвать функцию api.load()
, а затем вернуть событие, которое произошло первым, в данном случае либо eventOne|eventTwo|eventThree
Проблема в том, что этот синтаксис плохой, и этот пример не работает. Я не мог найти способ добиться этого с помощью async/await, и мне пришлось вернуться к таким обещаниям:
const waitForEvent = (api) => {
return new Promise(resolve) => {
api.on('eventOne', () => {
resolve('eventOne');
})
api.on('eventTwo', () => {
resolve('eventTwo');
})
api.on('eventThree', () => {
resolve('eventThree');
})
api.load();
}
}
Итак, мой вопрос: можно ли это сделать с помощью async/await? В любом случае, это можно сделать с помощью нового синтаксиса async/await es7?
return
возвращают свое значение из своих конкретных функций обработчика событий, а не из основной функцииwaitForEvent
. - person Will P.   schedule 03.05.2017async
/await
все равно использует промисы? А еслиapi
не обещано, нужно использовать конструкторPromise
. - person Bergi   schedule 03.05.2017