Определение минимального времени выполнения асинхронных функций

Как написано, код содержит SyntaxError: bew вместо new. После исправления add1 займёт примерно 4 секунды и вернёт 60, add2 — примерно 2 секунды и вернёт 70.

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

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

Как написано, код содержит SyntaxError: bew вместо new. После исправления add1 займёт примерно 4 секунды и вернёт 60, add2 — примерно 2 секунды и вернёт 70.

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

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

Условие

Даны три функции. Асинхронные функции add1() и add2() делают операцию сложения по разному. Определить за какое минимальное время выполнятся функции add1() и add2()

function resolveAfter2Seconds(x) {
  return bew Promise((resolve) => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

async function add1(x) {
  const a = await resolveAfter2Seconds(20);
  const b = await resolveAfter2Seconds(30);
  return x + a + b;
}

async function add2(x) {
  const promise_a = resolveAfter2Seconds(20);
  const promise_b = resolveAfter2Seconds(30);
  return x + (await promise_a) + (await promise_b);
}

add1(10).then(console.log);
add2(20).then(console.log);

Ответ

Как написано, код содержит SyntaxError: bew вместо new. После исправления add1 займёт примерно 4 секунды и вернёт 60, add2 — примерно 2 секунды и вернёт 70.

В add1 второй таймер создаётся только после завершения первого await, поэтому задержки складываются. В add2 обе операции запускаются до ожидания, и второе await получает уже готовый либо почти готовый результат. При одновременном запуске показанных вызовов сначала обычно выводится 70, затем 60. Таймер задаёт минимальную задержку, а не точный срок: загруженный event loop может увеличить время. Для пары реальных запросов удобнее Promise.all, сразу обрабатывающий отклонения обоих.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее