hpg-r3f-model-scene
Version:
Pretty Footer react component used in ant.design
83 lines (82 loc) • 2.29 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _lodash = require("lodash");
/*这个就是事件的原型*/
var EventEmitter = /*#__PURE__*/function () {
function EventEmitter() {
(0, _classCallCheck2.default)(this, EventEmitter);
this._events = void 0;
this._events = {};
}
(0, _createClass2.default)(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);
(0, _lodash.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 ((0, _typeof2.default)(_ret) === "object") return _ret.v;
}
return Promise.reject();
}
}]);
return EventEmitter;
}();
var _default = EventEmitter;
exports.default = _default;