event.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. function MyPromise(resolve) {
  2. this.resolveFunc = function () {
  3. };
  4. this.rejectFunc = function () {
  5. };
  6. resolve(this.resolve.bind(this), this.reject.bind(this));
  7. }
  8. MyPromise.prototype.resolve = function (val) {
  9. setTimeout(() => {
  10. this.resolveFunc(val);
  11. }, 0);
  12. };
  13. MyPromise.prototype.reject = function (val) {
  14. setTimeout(() => {
  15. this.rejectFunc(val);
  16. }, 0);
  17. };
  18. MyPromise.prototype.then = function (resolve, reject) {
  19. this.resolveFunc = resolve;
  20. this.rejectFunc = reject;
  21. return this;
  22. };
  23. module.exports = {
  24. _resolveStorage: {},
  25. _addResolve(eventName, resolve, removeEventAfterTrigger) {
  26. if (!this._resolveStorage[eventName]) {
  27. this._resolveStorage[eventName] = [];
  28. }
  29. this._resolveStorage[eventName].push({
  30. resolve: resolve,
  31. removeEventAfterTrigger: removeEventAfterTrigger,
  32. });
  33. },
  34. /**
  35. * 定义触发器
  36. * @param eventName
  37. * @param removeEventAfterTrigger
  38. * @returns {Promise<any>}
  39. */
  40. on(eventName, removeEventAfterTrigger) {
  41. return new MyPromise(fn => {
  42. if (typeof removeEventAfterTrigger === 'undefined') {
  43. removeEventAfterTrigger = true;
  44. }
  45. this._addResolve(eventName, fn, removeEventAfterTrigger);
  46. });
  47. },
  48. /**
  49. * 触发事件
  50. * @param eventName
  51. * @param e 传入数据(可选)
  52. */
  53. trigger(eventName, e) {
  54. if (!this._resolveStorage[eventName] || !this._resolveStorage[eventName].length) {
  55. return;
  56. }
  57. let saveEvens = [];
  58. for (let i in this._resolveStorage[eventName]) {
  59. this._resolveStorage[eventName][i].resolve(e);
  60. if (!this._resolveStorage[eventName][i].removeEventAfterTrigger) {
  61. saveEvens.push(this._resolveStorage[eventName][i]);
  62. }
  63. }
  64. this._resolveStorage[eventName] = saveEvens;
  65. },
  66. };