hpg-r3f-model-scene
Version:
Pretty Footer react component used in ant.design
75 lines • 1.95 kB
JavaScript
import _typeof from "@babel/runtime/helpers/esm/typeof";
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import { pull } from 'lodash';
/*这个就是事件的原型*/
var EventEmitter = /*#__PURE__*/function () {
function EventEmitter() {
_classCallCheck(this, EventEmitter);
this._events = void 0;
this._events = {};
}
_createClass(EventEmitter, [{
key: "_getFns",
value: function _getFns(event) {
return this._events[event] || (this._events[event] = []);
}
}, {
key: "on",
value: function on(event, cb) {
var fns = this._getFns(event);
fns.push(cb);
}
}, {
key: "off",
value: function off(event, cb) {
if (cb) {
var fns = this._getFns(event);
pull(fns, cb);
} else {
delete this._events[event];
}
}
}, {
key: "once",
value: function once(event, cb) {
var _this = this;
var fn2 = function fn2(e) {
_this.off(event, fn2);
cb(e);
};
this.on(event, fn2);
}
/* 同步调用 */
}, {
key: "emit",
value: function emit(event, param) {
var fns = this._getFns(event);
for (var i = 0; i < fns.length; i++) {
var fn = fns[i];
fn(param);
}
}
/* 可以异步调用,返回一个Promise */
}, {
key: "invoke",
value: function invoke(event, param) {
var fns = this._getFns(event);
var _loop = function _loop() {
var fn = fns[i];
return {
v: new Promise(function (resolve, reject) {
resolve(fn(param));
})
};
};
flag: for (var i = 0; i < fns.length; i++) {
var _ret = _loop();
if (_typeof(_ret) === "object") return _ret.v;
}
return Promise.reject();
}
}]);
return EventEmitter;
}();
export default EventEmitter;