Skip to content

Instantly share code, notes, and snippets.

@zzzgit
Forked from PierfrancescoSoffritti/eventBus.js
Created April 3, 2019 03:55
Show Gist options
  • Save zzzgit/a577d3c22be0e31025bf106d8cd2a4ab to your computer and use it in GitHub Desktop.
Save zzzgit/a577d3c22be0e31025bf106d8cd2a4ab to your computer and use it in GitHub Desktop.
A simple implementation of an event bus in Javascript. More details here: https://medium.com/@soffritti.pierfrancesco/create-a-simple-event-bus-in-javascript-8aa0370b3969
/**
* subscriptions data format:
* { eventType: { id: callback } }
*/
const subscriptions = { }
const getNextUniqueId = getIdGenerator()
function subscribe(eventType, callback) {
const id = getNextUniqueId()
if(!subscriptions[eventType])
subscriptions[eventType] = { }
subscriptions[eventType][id] = callback
return {
unsubscribe: () => {
delete subscriptions[eventType][id]
if(Object.keys(subscriptions[eventType]).length === 0) delete subscriptions[eventType]
}
}
}
function publish(eventType, arg) {
if(!subscriptions[eventType])
return
Object.keys(subscriptions[eventType]).forEach(key => subscriptions[eventType][key](arg))
}
function getIdGenerator() {
let lastId = 0
return function getNextUniqueId() {
lastId += 1
return lastId
}
}
module.exports = { publish, subscribe }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment