Middle+
Tarefa prática: implemente uma função que aceite um array de URLs e um limite de requisições simultâneas, e execute fetch com limitação de execução paralela (não mais do que limit requisições ao mesmo tempo), retornando os resultados na ordem original.
sobes.tech IA
Resposta da IA
Para resolver o problema com a restrição no número de pedidos fetch simultâneos, pode usar uma fila e controlar o número de promessas ativas. Aqui está um exemplo de implementação em JavaScript usando 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()) // ou res.json() dependendo da tarefa
.then(data => {
results[index] = data;
})
.catch(err => {
results[index] = err;
})
.finally(() => {
activeCount--;
next();
});
}
}
next();
});
}
Neste código, não lançamos mais de limit pedidos ao mesmo tempo, e após cada um ser concluído, iniciamos o próximo na fila. Os resultados são armazenados no array results na ordem original.