Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

3 лет назад
12345678910111213141516171819202122232425262728293031323334353637383940
  1. function createBroadcast (initialState) {
  2. var listeners = {};
  3. var id = 1;
  4. var _state = initialState;
  5. function getState () {
  6. return _state
  7. }
  8. function setState (state) {
  9. _state = state;
  10. var keys = Object.keys(listeners);
  11. var i = 0;
  12. var len = keys.length;
  13. for (; i < len; i++) {
  14. // if a listener gets unsubscribed during setState we just skip it
  15. if (listeners[keys[i]]) { listeners[keys[i]](state); }
  16. }
  17. }
  18. // subscribe to changes and return the subscriptionId
  19. function subscribe (listener) {
  20. if (typeof listener !== 'function') {
  21. throw new Error('listener must be a function.')
  22. }
  23. var currentId = id;
  24. listeners[currentId] = listener;
  25. id += 1;
  26. return currentId
  27. }
  28. // remove subscription by removing the listener function
  29. function unsubscribe (id) {
  30. listeners[id] = undefined;
  31. }
  32. return { getState: getState, setState: setState, subscribe: subscribe, unsubscribe: unsubscribe }
  33. }
  34. module.exports = createBroadcast;