Sobes.tech
Назад к вопросам
Middle+
2

Сколько времени будет занимать выполнение каждой функции? ```javascript /** Сколько времени будет занимать выполнение каждой функции */ 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()]); })(); ```

Компании, где спрашивали
Скиф трейд

Ответ от нейросети

sobes.tech AI

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

  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 внутри массива заставляет ждать по очереди, а не параллельно.