Middle+
Compito pratico: implementa una funzione che accetta un array di URL e un limite di richieste simultanee, e esegue richieste fetch con restrizione dell'esecuzione parallela (non più di limit richieste contemporaneamente), restituendo i risultati nell'ordine originale.
sobes.tech AI
Risposta dell'AI
Per risolvere il problema con il limite del numero di richieste fetch simultanee, puoi usare una coda e controllare il numero di promesse attive. Ecco un esempio di implementazione in 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()) // o res.json() a seconda del compito
.then(data => {
results[index] = data;
})
.catch(err => {
results[index] = err;
})
.finally(() => {
activeCount--;
next();
});
}
}
next();
});
}
In questo codice, non avviamo più di limit richieste contemporaneamente, e al completamento di ciascuna, ne avviamo una successiva in coda. I risultati vengono memorizzati nell'array results nell'ordine originale.