任务调度类TaskManager

49 阅读1分钟
// 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) })