@gunner17

Аsync await с генератором?

Помогите создать собственную реализацию синтаксиса async await используя Promise и функции-генераторы. Если использование стандартного синтаксиса выглядит так:
async function fetchData (id) {
    let user = await fetchUser(id),
        friends = await fetchFriends(id);
    return {
        user,
        friends
    };
}


то собственное решение должно выглядеть так:
let fetchData = _async(function* (id) {
    let user = (yield fetchUser(id)),
        friends = (yield fetchFriends(id));
    return {
        user,
        friends
    };
});


Задача написать функцию _async, которая принимает в качестве аргумента функцию-генератор и возвращает новую функцию, которая в свою очередь возьмёт под контроль управление итератором и вернёт Promise с конечным результатом.
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 2
@StockholmSyndrome
Ответ написан
Комментировать
@grinat
function _async (generator, prev) {
if (!generator.next) {
generator = generator()
}
const itRes = generator.next(prev)
return itRes.done ? itRes.value : itRes.value.then(r => _async(generator, r), e => generator.throw(e))
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы