@nickerlan

Как распараллелить async/await?

Был у меня код в духе
async (req,res) => {
res.end( await doLogic() )
}

async function doLogic {
var a = await doA()
var b = await doB(a)
var c = await doC(a)
return a
}


Все бы хорошо, но работал он слишком долго, потому что были дорогие запросы к API.

Пришло осознание, что на самом деле пользователю нужно отдавать только результат первого промиса, остальное хорошо бы распараллелить и закончить уже после отправки запроса.
async function doLogic {
var a = await doA()
doB(a) // пусть уйдет в параллель
doC(a) // пусть уйдет в параллель
return a
}


Но так оно не работает. B и С не срабатывают. Ни просто ни с then. Может быть промис некому разрешать или что то в этом духе, а выполнение уже заканчивается. Может быть нужно непойми как пробросить эти промисы из функций и написать Promise.all(...) уже после res.end. Не знаю.

Как это грамотно решить?
  • Вопрос задан
  • 359 просмотров
Пригласить эксперта
Ответы на вопрос 2
@grinat
const [b, c] = await Promise.all([doB(a), doC(a)])
Ответ написан
Krasnodar_etc
@Krasnodar_etc
avito front
Почему бы просто не вынести doB, doC в отдельную функцию? А её вызывать тут, после того как выполнится doA
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы