异步任务调度器

91 阅读1分钟

声明一个队列用来装超过个数的方法,当正在执行的count 比max大时,多余的方法装进队列中,每次执行完方法之后检查队列是否为空,不为空则调用第一个方法

```class scheduler{
        constructor(max){
        this.max=max
        this.count=0
        this.queue=[]
        }
        async add(fn){
            if(this.count>=this.max)
            {
                await new promise((resolve)=>{this.queue.push(resolve())})
            }
            this.count++
            const res=await fn()
            this.count--
            this.queue.length&&this.queue.shift()()
            return res
        }
    }