+
95
-

回答

   <script type="text/javascript">
        class PromiseQueue {
          constructor() {
            this.queue = [];
            this.paused = false;
          }
        
          addTask(task) {
            return new Promise((resolve, reject) => {
              const wrapper = () => {
                if (this.paused) {
                  this.queue.push(wrapper);
                } else {
                  task().then(resolve).catch(reject);
                }
              };
              this.queue.push(wrapper);
              if (this.queue.length === 1) {
                wrapper();
              }
            });
          }
        
          start() {
            this.paused = false;
            const next = () => {
              if (this.queue.length > 0) {
                const task = this.queue.shift();
                task();
              }
            };
            next();
          }
        
          pause() {
            this.paused = true;
          }
          
            resume() {
            this.paused = false;
          }
        }
        const queue = new PromiseQueue();
        
        const task1 = () => new Promise((resolve) => setTimeout(() => {
          console.log('Task 1');
          resolve();
        }, 1000));
        
        const task2 = () => new Promise((resolve) => setTimeout(() => {
          console.log('Task 2');
          resolve();
        }, 2000));
        
        queue.addTask(task1).then(() => console.log('Task 1 completed'));
        queue.addTask(task2).then(() => console.log('Task 2 completed'));
          
        queue.start();
        
        setTimeout(() => {
          queue.pause();
          console.log('Queue paused');
        }, 1500);
        
        setTimeout(() => {
          queue.start();
          console.log('Queue started');
        }, 4000);
        
        setTimeout(() => {
          queue.resume();
          console.log('Queue resume');
        }, 5000);
    </script>

网友回复

我知道答案,我要回答