eventric
Version:
behavior-first application development
49 lines (35 loc) • 1.17 kB
text/coffeescript
class PubSub
constructor: ->
= []
= 0
= (args...) -> setTimeout args...
subscribe: (eventName, subscriberFn) ->
new Promise (resolve, reject) =>
subscriber =
eventName: eventName
subscriberFn: subscriberFn
subscriberId:
.push subscriber
resolve subscriber.subscriberId
publish: (eventName, payload) ->
new Promise (resolve, reject) =>
subscribers = eventName
executeNextHandler = =>
if subscribers.length is 0
resolve()
else
subscribers.shift().subscriberFn payload, ->
executeNextHandler, 0
executeNextHandler, 0
_getRelevantSubscribers: (eventName) ->
if eventName
.filter (x) -> x.eventName is eventName
else
unsubscribe: (subscriberId) ->
new Promise (resolve, reject) =>
= .filter (x) -> x.subscriberId isnt subscriberId
resolve()
_getNextSubscriberId: ->
++
module.exports = PubSub