Выбор ответа Junior Промисы и async/await спрашивают часто обновлено
Последовательные await и время выполнения
Вопрос
Каждый вызов load занимает 1 секунду, вызовы независимы. Сколько примерно займёт a() и сколько b()?
async function a() {
const x = await load('x');
const y = await load('y');
const z = await load('z');
return [x, y, z];
}
async function b() {
return Promise.all([load('x'), load('y'), load('z')]);
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: a около 3 с, b около 1 с. В a каждый следующий load вызывается только после того, как дождались предыдущего, поэтому время складывается.
Варианты ответа
aоколо 3 с,bоколо 1 справильный ответ- Обе около 1 с: движок сам распараллелит независимые
await - Обе около 3 с: JavaScript однопоточный
aоколо 1 с,bоколо 3 с
Разбор
В a каждый следующий load вызывается только после того, как дождались предыдущего, поэтому время складывается. В b все три запроса запускаются сразу, и Promise.all ждёт самый долгий, примерно 1 с. Движок не переставляет await сам: порядок вызовов задаёт код. Однопоточность не мешает параллельному ожиданию: ожидание сети ведёт окружение, а не JS-поток.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.