Как написано, код содержит 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, сразу обрабатывающий отклонения обоих.