SOURCE

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 命令行工具 X clear

                    
>
console