При последовательном использовании await p1; await p2; выполнение кода приостанавливается сначала до завершения p1, затем — до завершения p2. Это значит, что второй промис начнёт выполняться только после того, как первый завершится.
Какой вариант будет быстрее: через Promise.all или через цикл с await на каждом шаге? Почему?
При последовательном использовании await p1; await p2; выполнение кода приостанавливается сначала до завершения p1, затем — до завершения p2.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При последовательном использовании await p1; await p2; выполнение кода приостанавливается сначала до завершения p1, затем — до завершения p2. Это значит, что второй промис начнёт выполняться только после того, как первый завершится.
В случае Promise.all([p1, p2]) оба промиса запускаются параллельно, и выполнение кода ждёт, пока оба промиса завершатся. Это эффективнее, если промисы не зависят друг от друга.
Пример:
async function sequential() {
const result1 = await p1; // ждём p1
const result2 = await p2; // ждём p2 после p1
return [result1, result2];
}
async function parallel() {
const [result1, result2] = await Promise.all([p1, p2]); // ждём оба одновременно
return [result1, result2];
}
Итог: Promise.all позволяет выполнять промисы параллельно, что сокращает общее время ожидания, а последовательный await — выполняет их один за другим.