Back to tasks
МТСGet help with live coding in real time with Sobes Copilot
Junior — Senior
23
Контроллер количества одновременно исполняемых асинхронных задач
Companies where asked:
Task condition
Реализуйте функцию runWithConcurrencyLimit(tasks, limit), которая принимает массив функций‑запросов tasks и целое число limit, задающее максимальное количество задач, исполняющихся одновременно.
Каждая функция из массива tasks должна возвращать Promise. Функция runWithConcurrencyLimit обязана запускать задачи, соблюдая указанный порог limit на количество одновременно работающих промисов. В результате она должна вернуть Promise, который разрешается массивом результатов в том же порядке, что и исходный массив tasks. Если какая‑то задача завершится с ошибкой, её ошибка должна быть сохранена в результирующем массиве под тем же индексом, при этом выполнение остальных задач не должно прерываться.
/*
Пример использования:
const tasks = [
() => new Promise(resolve => setTimeout(() => resolve(1), 2000)),
() => new Promise(resolve => setTimeout(() => resolve(2), 2000)),
() => new Promise((_, reject) => setTimeout(() => reject('Error in task 3'), 1000)),
() => new Promise(resolve => setTimeout(() => resolve(4), 4000)),
]
*/
runWithConcurrencyLimit(tasks, 2)
.then(results => console.log(results))
.catch(err => console.error(err));
// Ожидаемый вывод после примерно 7 секунд:
// [1, 2, 'Error in task 3', 4]
// limit always positive (>= 1)
function runWithConcurrencyLimit(tasks, limit) {}