function createRequest(tasks=[], count=5) {
let result = []
let runing = 0
let len = tasks.length
return new Promise((resolve, reject) => {
next()
function next() {
while(runing < count && tasks.length) {
let task = tasks.pop()
runing++
task.then(res => {
result.push(res)
}).finally(() => {
runing--
next()
})
}
console.log(result)
if(result.length === len) {
resolve(result)
}
}
})
}
function getRequest(time) {
return new Promise(resolve => {
setTimeout(() => resolve(time), time)
})
}
const tasks = [getRequest(4000), getRequest(2000),getRequest(2000),getRequest(2000)]
console.time()
createRequest(tasks, 2).then(res => {
console.log(res, 111)
console.timeEnd()
})