实现一个批量请求函数, 能够限制并发量?

767 阅读1分钟

实现一个批量请求函数, 能够限制并发量

function requestLimit(urls, max) {
    const result = []
    let count = 0; // 当前请求完成的数量
    let index = 0; // 下一个请求的下标
    return new Promise(resolve => {
        if (urls.length === 0) {
            resolve([])
            return;
        }
        // 发送请求
        const request = async () => {
            if (index === urls.length) {
                return;
            }
            let url = urls[index]
            let i = index
            index++
            try {
                const res = await fetch(url)
                result[i] = res
            } catch (error) {
                result[i] = error
            } finally {
                //判断是否所有请求都完成
                count++
                if (count === urls.length) {
                    resolve(result)
                }
                request()
            }
        }
        for (let i = 0; i < Math.min(max, urls.length); i++) {
            request()
        }
    })
}



requestLimit(new Array(100).fill('https://api.uomg.com/api/rand.qinghua?format=json'), 3).then(value => {
    console.log('value :>> ', value);
})