Реализуйте функцию limitConcurrency(tasks, limit), которая:
limit задач одновременноconst tasks = [
() => fetch('/api/1'),
() => fetch('/api/2'),
() => fetch('/api/3'),
() => fetch('/api/4'),
];
const results = await limitConcurrency(tasks, 2);
// максимум 2 запроса одновременно
Заведите счётчик running и указатель index. Функция next() стартует новые задачи пока running < limit && index < tasks.length. Важно: захватывайте i = index++ до инкремента, чтобы записать результат в results[i] — так сохраняется порядок.
Что ещё могут спросить: а если одна из задач упала с ошибкой — что делать с остальными? (reject сразу или дождаться всех). Или реализовать limitConcurrency через Promise.allSettled.