eventBus.js 1.8 KB

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