Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

46 рядки
879 B

  1. module.exports = {
  2. events: {},
  3. //The only supported option right now is isAsync: boolean
  4. on: function (event, callback, options) {
  5. let list = this.events[event] || (this.events[event] = []);
  6. list.push({ callback, ...options });
  7. return callback;
  8. },
  9. off: function (event, callback) {
  10. let list = this.events[event] || [];
  11. let lLen = list.length;
  12. for (let i = 0; i < lLen; i++) {
  13. const { callback: lCallback } = list[i];
  14. if (lCallback === callback) {
  15. list.splice(i, 1);
  16. i--;
  17. lLen--;
  18. }
  19. }
  20. if (lLen === 0)
  21. delete this.events[event];
  22. },
  23. emit: async function (event) {
  24. let args = [].slice.call(arguments, 1);
  25. let list = this.events[event];
  26. if (!list)
  27. return;
  28. for (let l of list) {
  29. const { isAsync, callback } = l;
  30. if (isAsync)
  31. await callback.apply(null, args);
  32. else
  33. callback.apply(null, args);
  34. }
  35. }
  36. };