📘 Premium Read: Access my best content on Medium member-only articles — deep dives into Java, Spring Boot, Microservices, backend architecture, interview preparation, career advice, and industry-standard best practices.
✅ Some premium posts are free to read — no account needed. Follow me on Medium to stay updated and support my writing.
🎓 Top 10 Udemy Courses (Huge Discount): Explore My Udemy Courses — Learn through real-time, project-based development.
▶️ Subscribe to My YouTube Channel (172K+ subscribers): Java Guides on YouTube
Event bus implementation
Subscribe
this.addEventListener = function(eventName, listener) {
if (!eventTopics[eventName] || eventTopics[eventName].length < 1) {
eventTopics[eventName] = [];
}
eventTopics[eventName].push(listener);
};
Publisher
this.emitEventListeners = function(eventName, params) {
if (!eventTopics[eventName] || eventTopics[eventName].length < 1)
return;
eventTopics[eventName].forEach(function(listener) {
listener(!!params ? params : {});
});
}
Remove Subscriber
this.removeListener = function(eventName, listener) {
if (!eventTopics[eventName] || eventTopics[eventName].length < 1)
return;
// delete listener by event name
delete eventTopics[eventName];
};
this.getListener = function(eventName){
return eventTopics[eventName];
}
Usage
function test(){
var eventBus = new EventBus();
var data1 = "some data for event1";
var data2 = "some data for event2";
// add listener to event1
eventBus.addEventListener("event1", function(data){
console.log("listener1 listen event1 -> " + data);
});
// add listener to event1
eventBus.addEventListener("event1", function(data){
console.log("listener2 listen event1 -> " + data);
});
// add listener to event2
eventBus.addEventListener("event2", function(data){
console.log("listener1 listen event2 -> " + data);
});
// add listener to event2
eventBus.addEventListener("event2", function(data){
console.log("listener2 listen event2 -> " + data);
});
eventBus.emitEventListeners("event1", data1);
eventBus.emitEventListeners("event2", data2);
}
test();
Complete Code and Output
/**
* Create an Event Bus object which has the registration and publishing API.
* addEventListener and emitEventListeners functions
* lets the subscriber and publisher to subscribe and publish on events respectively.
*/
function EventBus() {
var eventTopics = {};
this.addEventListener = function(eventName, listener) {
if (!eventTopics[eventName] || eventTopics[eventName].length < 1) {
eventTopics[eventName] = [];
}
eventTopics[eventName].push(listener);
};
this.emitEventListeners = function(eventName, params) {
if (!eventTopics[eventName] || eventTopics[eventName].length < 1)
return;
eventTopics[eventName].forEach(function(listener) {
listener(!!params ? params : {});
});
}
this.removeListener = function(eventName, listener) {
if (!eventTopics[eventName] || eventTopics[eventName].length < 1)
return;
// delete listener by event name
delete eventTopics[eventName];
};
this.getListener = function(eventName){
return eventTopics[eventName];
}
} //END EventBus
function test(){
var eventBus = new EventBus();
var data1 = "some data for event1";
var data2 = "some data for event2";
// add listener to event1
eventBus.addEventListener("event1", function(data){
console.log("listener1 listen event1 -> " + data);
});
// add listener to event1
eventBus.addEventListener("event1", function(data){
console.log("listener2 listen event1 -> " + data);
});
// add listener to event2
eventBus.addEventListener("event2", function(data){
console.log("listener1 listen event2 -> " + data);
});
// add listener to event2
eventBus.addEventListener("event2", function(data){
console.log("listener2 listen event2 -> " + data);
});
eventBus.emitEventListeners("event1", data1);
eventBus.emitEventListeners("event2", data2);
}
test();
listener1 listen event1 -> some data for event1
listener2 listen event1 -> some data for event1
listener1 listen event2 -> some data for event2
listener2 listen event2 -> some data for event2
Comments
Post a Comment
Leave Comment