Выбор ответа Junior Асинхронные паттерны спрашивают часто обновлено
Последовательные await и Promise.all
Вопрос
Функции getUser() и getOrders() независимы и идут по 300 мс каждая. Сколько займёт этот код и как его ускорить?
const user = await getUser(id);
const orders = await getOrders(id);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Около 600 мс; ускорить через Promise.all для обоих. Второй запрос стартует только после того, как первый завершился, поэтому времена складываются.
Варианты ответа
- 300 мс: await сам распараллеливает соседние вызовы
- Около 600 мс; ускорить через
Promise.allдля обоихправильный ответ - Около 600 мс; ускорить, убрав
awaitу второго вызова - Около 600 мс, и ускорить нельзя: JS однопоточный
Разбор
Второй запрос стартует только после того, как первый завершился, поэтому времена складываются. Promise.all запускает оба сразу и ждёт оба: около 300 мс.
awaitничего не распараллеливает, он ждёт.- Без
awaitвordersокажется промис, а не данные. - Однопоточность не мешает: пока идёт сетевой запрос, поток свободен и может ждать второй.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.