eventBus.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.EventBus = void 0;
  4. const events_1 = require("@dage/events");
  5. class EventBus {
  6. constructor() {
  7. this.emitter = new events_1.EventEmitter();
  8. this.bufferMap = new Map();
  9. }
  10. getBufferValue(event) {
  11. return this.bufferMap.get(event);
  12. }
  13. setBufferValue(event, val) {
  14. this.bufferMap.set(event, val);
  15. }
  16. /**
  17. * 监听事件
  18. */
  19. on(event, callback) {
  20. const bufferValue = this.getBufferValue(event);
  21. if (bufferValue) {
  22. callback(bufferValue);
  23. }
  24. this.emitter.on(event, callback);
  25. return () => {
  26. this.emitter.off(event, callback);
  27. };
  28. }
  29. /**
  30. * 监听一次事件
  31. */
  32. once(event, callback) {
  33. const bufferValue = this.getBufferValue(event);
  34. if (bufferValue) {
  35. callback(bufferValue);
  36. return () => { };
  37. }
  38. this.emitter.once(event, callback);
  39. return () => {
  40. this.emitter.off(event, callback);
  41. };
  42. }
  43. /**
  44. * 触发事件
  45. * @param event
  46. * @param arg
  47. * @param replay - 是否重放该值
  48. */
  49. emit(event, arg, replay = false) {
  50. if (replay) {
  51. this.setBufferValue(event, arg);
  52. }
  53. this.emitter.emit(event, arg);
  54. }
  55. /**
  56. * 需要最新值的时候 可以调用此方法重置
  57. */
  58. resetReplayValue(event) {
  59. this.bufferMap.delete(event);
  60. }
  61. /**
  62. * 监听新的订阅者
  63. */
  64. onSubscriber(event, callback) {
  65. const listener = (name, subscriber) => {
  66. if (name === event) {
  67. callback(subscriber);
  68. }
  69. };
  70. this.emitter.on("newListener", listener);
  71. return () => {
  72. this.emitter.off("newListener", listener);
  73. };
  74. }
  75. }
  76. exports.EventBus = EventBus;