Сколько времени будет занимать выполнение каждой функции?

Время выполнения каждой функции:

Короткий ответ

Что ответить на собеседовании

Время выполнения каждой функции:

Подробный разбор

Ответ с пояснениями

Условие

Сколько времени будет занимать выполнение каждой функции?

/** Сколько времени будет занимать выполнение каждой функции */
function pause500ms () {
  return new Promise(res => setTimeout(res, 500));
}

(async function test1 () {
  pause500ms();
  pause500ms();
})();

(async function test2 () {
  await pause500ms();
  await pause500ms();
})();

(async function test3 () {
  await Promise.all([pause500ms(), pause500ms()]);
})();

(async function test4 () {
  await Promise.all([await pause500ms(), await pause500ms()]);
})();

Ответ

Время выполнения каждой функции:

  1. test1
(async function test1 () {
  pause500ms();
  pause500ms();
})();

Здесь обе функции pause500ms() вызываются, но их промисы не ожидаются (await нет). Значит, функция test1 завершится почти мгновенно, не дожидаясь 500 мс. Время выполнения — практически 0 мс.

  1. test2
(async function test2 () {
  await pause500ms();
  await pause500ms();
})();

Здесь вызовы идут последовательно: сначала ждём 500 мс первого pause500ms(), затем ещё 500 мс второго. Итого около 1000 мс.

  1. test3
(async function test3 () {
  await Promise.all([pause500ms(), pause500ms()]);
})();

Обе функции запускаются одновременно, и мы ждём, пока обе завершатся. Так как обе по 500 мс, общее время — около 500 мс.

  1. test4
(async function test4 () {
  await Promise.all([await pause500ms(), await pause500ms()]);
})();

Здесь сначала выполняется await pause500ms(), ждём 500 мс, затем второй await pause500ms(), ещё 500 мс. В итоге Promise.all получает уже завершенные значения, и ждёт ничего не нужно. Итого около 1000 мс.

Итог:

  • test1: ~0 мс (не ждёт)
  • test2: ~1000 мс (последовательно)
  • test3: ~500 мс (параллельно)
  • test4: ~1000 мс (последовательно из-за двойного await)

Такое поведение связано с тем, что await заставляет ждать завершения промиса, а в test4 await внутри массива заставляет ждать по очереди, а не параллельно.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку