异步调度器Scheduler

/**
 * 题目: JS实现一个带并发限制的异步调度器Scheduler,保证同时运行的任务最多有两个。完善代码中Scheduler类,使得以下程序能正确输出
 * 条件: 只能修改Sheduler
 **/
class Scheduler {
  constructor(){
    this.cache = [] // 缓存任务数据
    this.task = [] // 当前执行任务队列
    this._max =  2 // 最大并发任务
  }
  add(promiseCreator) { 
      return new Promise(resolve=>{
        promiseCreator.resolve = resolve; // 保存当前promise的状态
        if(this.task.length < this._max) { // 最大并发任务处理
          this.runWork(promiseCreator)
        } else {
          this.cache.push(promiseCreator)
        }
      })
   }
   runWork(promiseCreator) {
    this.task.push(promiseCreator)
    promiseCreator().then(() => {
      promiseCreator.resolve()
      this.task.splice(this.task.indexOf(promiseCreator), 1) // 当前任务执行完成 清除task中的数据
      if(this.cache.length) {
           this.runWork(this.cache.shift()) // 根据执行的缓存顺序执行,保证执行的有序性
      }
    })
   }
}
const timeout = (time) => new Promise(resolve => {
  setTimeout(resolve, time)
})
const scheduler = new Scheduler()
const addTask = (time, order) => {
  const result = scheduler.add(() => timeout(time))
  result.then(() => console.log(order + 'order'))
}

addTask(1000, '1')
addTask(500, '2')
addTask(300, '3')
addTask(400, '4')// output: 2 3 1 4
// 一开始,1、2两个任务进入队列
// 500ms时,2完成,输出2,任务3进队
// 800ms时,3完成,输出3,任务4进队
// 1000ms时,1完成,输出1
// 1200ms时,4完成,输出4