You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Listenable.js 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import EventEmitter from 'events';
  2. /**
  3. * The class implements basic event operations - add/remove listener.
  4. * NOTE: The purpose of the class is to be extended in order to add
  5. * this functionality to other classes.
  6. */
  7. export default class Listenable {
  8. /**
  9. * Creates new instance.
  10. * @param {EventEmitter} eventEmitter
  11. * @constructor
  12. */
  13. constructor(eventEmitter = new EventEmitter()) {
  14. this.eventEmitter = eventEmitter;
  15. // aliases for addListener/removeListener
  16. this.addEventListener = this.on = this.addListener;
  17. this.removeEventListener = this.off = this.removeListener;
  18. }
  19. /**
  20. * Adds new listener.
  21. * @param {String} eventName the name of the event
  22. * @param {Function} listener the listener.
  23. * @returns {Function} - The unsubscribe function.
  24. */
  25. addListener(eventName, listener) {
  26. this.eventEmitter.addListener(eventName, listener);
  27. return () => this.removeEventListener(eventName, listener);
  28. }
  29. /**
  30. * Removes listener.
  31. * @param {String} eventName the name of the event that triggers the
  32. * listener
  33. * @param {Function} listener the listener.
  34. */
  35. removeListener(eventName, listener) {
  36. this.eventEmitter.removeListener(eventName, listener);
  37. }
  38. }