// class TaskManager {
// addTask: ( fn: () => Promise<T> ) => Promise<T>
// }
// 任务调度类,实例化后可以通过 taskManager.addTask添加任务,添加的任务可以通过.then拿到结果
// 同时执行的任务数量不能超过5个
// 示例
// const tm = new TaskManager(5)
// tm.addTask(() => Promise.resolve(10)).then(data => { console.log(data) }) // 10
// tm.addTask(() => Promise.resolve(20)).then(data => { console.log(data) }) // 20
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) }) // 10
tm.addTask(() => Promise.resolve(20)).then(data => { console.log(data) }) // 20

//扩展
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) })