function multiRequest(urls,maxNum) {
return new Promise((resolve,reject) => {
const results = new Array(urls.length);
let currentIndex = 0;
let activeRequests = 0;
let completedRequests= 0;
function request(url,index) {
return new Promise((res,rej)=>{
setTimeout(()=> {
res(`Response from ${url}`);
}, Math.random() * 1000)
}).then((result) => {
results[index] = result;
console.log(results);
completedRequests++;
activeRequests--;
console.log('1', completedRequests)
if(completedRequests === urls.length) {
resolve(results);
} else {
startNextRequest()
}
}).catch((err)=>{
reject(err)
})
}
function startNextRequest() {
if(currentIndex < urls.length && activeRequests < maxNum) {
const currentUrl = urls[currentIndex];
const currentIdx = currentIndex;
currentIndex++
console.log(currentIndex)
activeRequests++
request(currentUrl,currentIdx)
}
}
for(let i =0;i<maxNum && i<urls.length;i++) {
startNextRequest()
}
})
}
const urls = ['url1', 'url2', 'url3','url4','url5'];
const maxNum= 2;
multiRequest(urls,maxNum).then((results)=>{
console.log('All requests completed:', results);
}).catch((error) => {
console.log('An error occurred:', error);
})
console