scheduler.js 860 B

123456789101112131415161718192021222324252627282930313233343536
  1. "use strict";
  2. /* IMPORT */
  3. Object.defineProperty(exports, "__esModule", { value: true });
  4. /* VARIABLES */
  5. const Queues = {};
  6. /* SCHEDULER */
  7. //TODO: Maybe publish this as a standalone package
  8. const Scheduler = {
  9. next: (id) => {
  10. const queue = Queues[id];
  11. if (!queue)
  12. return;
  13. queue.shift();
  14. const job = queue[0];
  15. if (job) {
  16. job(() => Scheduler.next(id));
  17. }
  18. else {
  19. delete Queues[id];
  20. }
  21. },
  22. schedule: (id) => {
  23. return new Promise(resolve => {
  24. let queue = Queues[id];
  25. if (!queue)
  26. queue = Queues[id] = [];
  27. queue.push(resolve);
  28. if (queue.length > 1)
  29. return;
  30. resolve(() => Scheduler.next(id));
  31. });
  32. }
  33. };
  34. /* EXPORT */
  35. exports.default = Scheduler;