queue.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /**
  2. * DevExtreme (core/utils/queue.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var errors = require("../errors");
  11. var when = require("../../core/utils/deferred").when;
  12. function createQueue(discardPendingTasks) {
  13. var _tasks = [];
  14. var _busy = false;
  15. function exec() {
  16. while (_tasks.length) {
  17. _busy = true;
  18. var task = _tasks.shift();
  19. var result = task();
  20. if (void 0 === result) {
  21. continue
  22. }
  23. if (result.then) {
  24. when(result).always(exec);
  25. return
  26. }
  27. throw errors.Error("E0015")
  28. }
  29. _busy = false
  30. }
  31. function add(task, removeTaskCallback) {
  32. if (!discardPendingTasks) {
  33. _tasks.push(task)
  34. } else {
  35. if (_tasks[0] && removeTaskCallback) {
  36. removeTaskCallback(_tasks[0])
  37. }
  38. _tasks = [task]
  39. }
  40. if (!_busy) {
  41. exec()
  42. }
  43. }
  44. function busy() {
  45. return _busy
  46. }
  47. return {
  48. add: add,
  49. busy: busy
  50. }
  51. }
  52. exports.create = createQueue;
  53. exports.enqueue = createQueue().add;