QueueManager.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // utils/queueManager.js
  2. class QueueManager {
  3. constructor() {
  4. this._tasks = [];
  5. this._listenMap = {};
  6. this._timer = null;
  7. this._interval = 20;
  8. }
  9. // static get instance() {
  10. // if (!QueueManager._instance) {
  11. // QueueManager._instance = new QueueManager();
  12. // }
  13. // return QueueManager._instance;
  14. // }
  15. addTask(task) {
  16. // console.log(`QueueManager======addTask======${task}`);
  17. this._tasks.unshift(task);
  18. // console.log(`指令进队列:${task.toString()}, 数量:${this._tasks.length}`);
  19. }
  20. listenTask(callback) {
  21. // console.log(`QueueManager======listenTask======${callback.name || 'anonymous'}`);
  22. // this._listenMap[callback.name || 'anonymous'] = callback;
  23. if (!this._timer) {
  24. this._timer = setInterval(() => {
  25. if (this._tasks.length === 0) {
  26. // console.log('QueueManager======execute======list empty');
  27. return;
  28. }
  29. const last = this._tasks.pop();
  30. if (callback) {
  31. callback(last);
  32. }
  33. // Object.keys(this._listenMap).forEach(key => {
  34. // const value = this._listenMap[key];
  35. // if (last.constructor.name === key || key === 'dynamic') {
  36. // console.log(`QueueManager======listenTask======forEach===callback`);
  37. // value(last);
  38. // }
  39. // });
  40. // 不管有没有订阅,都移除掉
  41. }, this._interval);
  42. }
  43. }
  44. clear() {
  45. // console.log('QueueManager======clear======');
  46. if (this._tasks.length > 0) {
  47. this._tasks.length = 0;
  48. }
  49. }
  50. dispose() {
  51. // console.log('QueueManager======dispose======');
  52. this.clear();
  53. if (this._timer) {
  54. clearInterval(this._timer);
  55. this._timer = null;
  56. }
  57. this._listenMap = {};
  58. }
  59. }
  60. module.exports = QueueManager;