题目:
限制函数在请求进程中的数量最大为 max 个,每当函数成功或者失败都算一次已经结束的请求,请求之后再添加(max-进程中数量)个到进程中。
例:
第一次5个函数在进程中,当前已经请求完成3个,这时候就要再添加5-3=2个请求到进程中来
分析:
定义一个并发进程计数器,使用 es6的 promise 函数,每次请求之前就把计数器+1,当 resolve 或 reject 后就把计数器-1,再从当前函数数组里删掉已经完成请求的函数,使用递归再次调用当前方法,就完成了自动添加未执行的函数到进程中
// 函数数组 urls[], 并发最大数 max
// fetch()
let result = (url) => new Promise((resolve, reject) => {
let total = 0
total += 1
fetch(url).then(res=> {
total -= 1
resolve(res)
result(urls.splice(1)) // 减去当前请求完成的函数然后递归调用,也可以使用 shift()方法
}).catch(err => {
totao -= 1
reject(err)
result(urls.splice(1))
})
})