|
12345678910111213141516171819202122232425262728293031323334353637383940 |
- function createBroadcast (initialState) {
- var listeners = {};
- var id = 1;
- var _state = initialState;
-
- function getState () {
- return _state
- }
-
- function setState (state) {
- _state = state;
- var keys = Object.keys(listeners);
- var i = 0;
- var len = keys.length;
- for (; i < len; i++) {
- // if a listener gets unsubscribed during setState we just skip it
- if (listeners[keys[i]]) { listeners[keys[i]](state); }
- }
- }
-
- // subscribe to changes and return the subscriptionId
- function subscribe (listener) {
- if (typeof listener !== 'function') {
- throw new Error('listener must be a function.')
- }
- var currentId = id;
- listeners[currentId] = listener;
- id += 1;
- return currentId
- }
-
- // remove subscription by removing the listener function
- function unsubscribe (id) {
- listeners[id] = undefined;
- }
-
- return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe }
- }
-
- export default createBroadcast;
|