PassFront
  1. PassFront
  2. База знаний
  3. DOM и браузер

Как будешь работать с параллельными запросами?

DOM и браузер

Параллельные запросы выполняют одновременно через `Promise.all`/`allSettled` (запуская их сразу), а не последовательными `await`. Способ зависит от того, нужны ли все результаты и как обрабатывать ошибки.

Запуск параллельно

Промисы стартуют сразу при создании — важно не «ждать» их по очереди:

// Последовательно (медленно)
const a = await fetchA();
const b = await fetchB();

// Параллельно (быстро)
const [a, b] = await Promise.all([fetchA(), fetchB()]);

Выбор комбинатора

  • Promise.all — нужны все результаты, при первой ошибке падает всё (fail-fast).
  • Promise.allSettled — нужны все, но терпимы ошибки: возвращает статусы каждого.
  • Promise.race — достаточно первого завершившегося (таймауты).
  • Promise.any — нужен первый успешный.
const results = await Promise.allSettled(urls.map((u) => fetch(u)));

Ограничение параллелизма

Много запросов сразу могут перегрузить сервер. Их батчат — запускают по N одновременно (пул):

// упрощённо: чанки по 5
for (const chunk of chunks(tasks, 5)) {
  await Promise.all(chunk.map((t) => t()));
}

Или используют библиотеки (p-limit).

Дополнительно

  • Отмена — через AbortController.
  • Обработка ошибок — try/catch или allSettled.

Коротко для собеседования

Параллельные запросы — запустить сразу и агрегировать через Promise.all (все, fail-fast), allSettled (все со статусами), race/any (первый). Не делать последовательные await. Для большого числа — ограничивать параллелизм (пул, p-limit), отменять через AbortController.

Другие вопросы раздела