class TaskManager{
list = []
count = 0
constructor(num){
this.num = num
}
async addTask(fn){
this.count >= this.num ? await new Promise(resolve => this.list.push(resolve)) : ''
this.count++
let result = await fn()
this.count--
if(this.list.length >0){
this.list.shift()()
}
return result
}
}
const tm = new TaskManager(5)
tm.addTask(() => Promise.resolve(10)).then(data => { console.log(data) })
tm.addTask(() => Promise.resolve(20)).then(data => { console.log(data) })
function asyncFacotory(n, time){
return new Promise(resolve=>{
setTimeout(()=>{
resolve(n)
},time)
})
}
tm.addTask(() => asyncFacotory(10,2000)).then(data => { console.log(data) })
tm.addTask(() => asyncFacotory(10,2000)).then(data => { console.log(data) })