queue.js 565 B

123456789101112131415161718192021222324252627282930313233
  1. 'use strict';
  2. module.exports = class Queue {
  3. _queue = [];
  4. _executing = false;
  5. _jobRunner = null;
  6. constructor(jobRunner) {
  7. this._jobRunner = jobRunner;
  8. }
  9. enqueue = (...args) => {
  10. this._queue.push(args);
  11. this._dequeue();
  12. };
  13. destroy() {
  14. this._queue.length = 0;
  15. this._jobRunner = null;
  16. }
  17. _dequeue() {
  18. if (this._executing || !this._queue.length) return;
  19. this._executing = true;
  20. this._jobRunner(...this._queue.shift());
  21. setTimeout(() => {
  22. this._executing = false;
  23. this._dequeue();
  24. });
  25. }
  26. };