voerka-i18n/packages/runtime/eventemitter.js
2022-03-21 15:18:30 +08:00

31 lines
725 B
JavaScript

/**
*
* 简单的事件触发器
*
*/
module.exports = class EventEmitter{
constructor(){
this._callbacks = []
}
on(callback){
if(this._callbacks.includes(callback)) return
this._callbacks.push(callback)
}
off(callback){
for(let i=0;i<this._callbacks.length;i++){
if(this._callbacks[i]===callback ){
this._callbacks.splice(i,1)
}
}
}
offAll(){
this._callbacks = []
}
async emit(...args){
if(Promise.allSettled){
await Promise.allSettled(this._callbacks.map(cb=>cb(...args)))
}else{
await Promise.all(this._callbacks.map(cb=>cb(...args)))
}
}
}