Назад к вопросам
OZON
Middle+
7
Практическая задача: реализуй функцию, которая принимает массив URL и лимит одновременных запросов, и выполняет fetch-запросы с ограничением параллельного выполнения (не более limit запросов одновременно), возвращая результаты в исходном порядке.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для решения задачи с ограничением количества одновременных fetch-запросов можно использовать очередь и контролировать количество активных промисов. Ниже пример реализации на JavaScript с использованием async/await:
async function limitedFetch(urls, limit) {
const results = new Array(urls.length);
let activeCount = 0;
let currentIndex = 0;
return new Promise((resolve, reject) => {
function next() {
if (currentIndex === urls.length && activeCount === 0) {
resolve(results);
return;
}
while (activeCount < limit && currentIndex < urls.length) {
const index = currentIndex++;
activeCount++;
fetch(urls[index])
.then(res => res.text()) // или res.json() в зависимости от задачи
.then(data => {
results[index] = data;
})
.catch(err => {
results[index] = err;
})
.finally(() => {
activeCount--;
next();
});
}
}
next();
});
}
В этом коде мы запускаем не более limit запросов одновременно, и по завершении каждого запускаем следующий из очереди. Результаты сохраняются в массиве results в исходном порядке.