37 lines
1.1 KiB
JavaScript
37 lines
1.1 KiB
JavaScript
class EventBus{
|
|
constructor(){
|
|
this.listeners = {}
|
|
}
|
|
on(eventName, callback){
|
|
if(!this.listeners[eventName]){
|
|
this.listeners[eventName] = [];
|
|
}
|
|
this.listeners[eventName].push(callback);
|
|
return ()=>{
|
|
this.off(eventName, callback);
|
|
}
|
|
}
|
|
emit(eventName, data){
|
|
if(!this.listeners[eventName]){
|
|
return;
|
|
}
|
|
this.listeners[eventName].forEach((callback)=>{
|
|
callback(data);
|
|
})
|
|
}
|
|
async emitAsync(eventName, data){
|
|
if(!this.listeners[eventName]){
|
|
return Promise.resolve();
|
|
}
|
|
const callBackPromises = this.listeners[eventName].map((callback)=>{
|
|
return Promise.resolve(callback(data));
|
|
})
|
|
await Promise.all(callBackPromises);
|
|
}
|
|
off(eventName, callback){
|
|
if(!this.listeners[eventName]){
|
|
return;
|
|
}
|
|
this.listeners[eventName] = this.listeners[eventName].filter(listener => listener !== callback);
|
|
}
|
|
} |