listen-events
Version:
EventBus 是一个简单的 WEB 端事件侦听器,提供了一种将事件分派给订阅的事件侦听器的机制。
24 lines • 3.15 kB
JavaScript
"use strict";exports.__esModule=true;exports.EventBus=void 0;var EventBus=(function(){function EventBus(listeners){this._listeners=listeners||{};}
EventBus.prototype.emitSync=function(name){var _this=this;var args=[];for(var _i=1;_i<arguments.length;_i++){args[_i-1]=arguments[_i];}
name=name.toString();var vals=[];if(this.has(name)){var _e=this.listeners(name);if(_e.length===1){_e.map(function(f){var v=f.apply(f,args);f.once&&_this.offs(name);vals.push(v);});}
else{_e=_e.map(function(f){if(f.length===args.length){var v=f.apply(f,args);vals.push(v);if(f.once)
return null;}
return f;}).filter(function(f){return f!=null;});_e.length>0?(this._listeners[name]=_e):this.offs(name);}}
return Promise.all(vals);};EventBus.prototype.emit=function(name){var _this=this;var args=[];for(var _i=1;_i<arguments.length;_i++){args[_i-1]=arguments[_i];}
name=name.toString();if(this.has(name)){var _e=this.listeners(name);if(_e.length===1){_e.map(function(f){f.apply(f,args),f.once&&_this.offs(name);});}
else{_e=_e.map(function(f){if(f.length===args.length){f.apply(f,args);if(f.once)
return null;}
return f;}).filter(function(f){return f!=null;});_e.length>0?(this._listeners[name]=_e):this.offs(name);}}
return this;};EventBus.prototype.emitAll=function(name){var args=[];for(var _i=1;_i<arguments.length;_i++){args[_i-1]=arguments[_i];}
name=name.toString();if(this.has(name)){var _e=this.listeners(name).map(function(f){return f===null||f===void 0?void 0:f.apply(f,args),f;}).filter(function(f){return!f.once;});_e.length>0?(this._listeners[name]=_e):this.offs(name);}
return this;};EventBus.prototype.on=function(name,listener){name=name.toString();var i=this._findIndex(name,listener);if(i===-1){if(!this._listeners[name])
this._listeners[name]=[];this._listeners[name].push(listener);}
return this;};EventBus.prototype.once=function(name,listener){return listener.once=1,this.on(name,listener);};EventBus.prototype.off=function(name,listener){name=name.toString();var i=this._findIndex(name,listener);if(i>-1){var c=this.count(name);if(c===1){this.offs(name);}
else{this._listeners[name].splice(i,1);}}
return this;};EventBus.prototype.offs=function(){var _this=this;var names=[];for(var _i=0;_i<arguments.length;_i++){names[_i]=arguments[_i];}
names.map(function(name){_this._listeners[name.toString()]&&delete _this._listeners[name.toString()];});return this;};EventBus.prototype.listeners=function(name){var _e=this._listeners[name];return _e?_e:[];};EventBus.prototype.has=function(name){return this.listeners(name).length>0;};EventBus.prototype.count=function(name){return this.listeners(name).length;};EventBus.prototype._findIndex=function(name,listener){if(this.has(name)===false)
return-1;if(!listener)
return 0;var _e=this.listeners(name);for(var i=0;i<_e.length;i++){var f=_e[i];if(!f)
continue;if((f.name===listener.name&&f.length===listener.length)||f.toString()===listener.toString())
return i;}
return-1;};EventBus.prototype._reflectApply=function(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};return EventBus;}());exports.EventBus=EventBus;var eventBus=new EventBus();exports["default"]=eventBus;