js实现控制最大并发请求数量

173 阅读1分钟
/**
 * 串行并行最大数
 * 一次最多发送maxNum的请求,请求结果和url的顺序一致
 */
function multiRequest(urls=[], maxNum = 5) {
    const len = urls.length;
    // 创建存储结果
    let results = new Array(len).fill(false)
    // 当前完成的数量
    let count = 0;
    return new Promise((resolve, reject) => {
        while(count < maxNum) {
            next()
        }
    
        function next() {
            let current = count++;
            if (current >= len) {
                !results.includes(false) && resolve(results)
                return
            }
            const url = urls[current];
            fetch(url).then(res => {
                results[current] = res;
                if (current < len) {
                    next()
                }
            }).catch(err => {
                results[current] = err;
                if (current < len) {
                    next()
                }
            })
        }
    })
 
}