美文网首页面试那些事
js实现限制并发的Promise调度器

js实现限制并发的Promise调度器

作者: _静夜听雨_ | 来源:发表于2021-12-07 10:15 被阅读0次

    实现一个带并发限制的异步调度器 Scheduler,保证同时运行的任务最多有两个

    class Scheduler {
        constructor(limit) {
          this.queue = []
          this.limit = limit
          this.count = 0
        }
        add(time, order) {
          const promiseCreator = () => {
            return new Promise((resolve, reject) => {
              setTimeout(() => {
                console.log(order)
                resolve()
              }, time)
            })
          }
          this.queue.push(promiseCreator)
        }
        taskStart() {
          for(let i = 0; i < this.limit; i++) {
            this.request()
          }
        }
      
        request() {
          if (!this.queue.length || this.count >= this.limit) return
          this.count++
          this.queue.shift()().then(() => {
            this.count--
            this.request()
          })
        }
      }
      // 测试代码
      const scheduler = new Scheduler(2);
      const addTask = (time, order) => {
        scheduler.add(time, order);
      };
      addTask(1000, "1");
      addTask(500, "2");
      addTask(300, "3");
      addTask(400, "4");
      scheduler.taskStart();
    

    相关文章

      网友评论

        本文标题:js实现限制并发的Promise调度器

        本文链接:https://www.haomeiwen.com/subject/qczzxrtx.html