Skip to content

Instantly share code, notes, and snippets.

@topicus
Last active January 13, 2017 19:51
Show Gist options
  • Save topicus/d867b3c8d9878bff9fd601b891a48c47 to your computer and use it in GitHub Desktop.
Save topicus/d867b3c8d9878bff9fd601b891a48c47 to your computer and use it in GitHub Desktop.
High Order Store for Web Workers
export const createSubscriber = (emmiter, store) => handler => {
emmiter.addEventListener('message', (message) => handler(message.data));
if (store) store.subscribe(handler);
};
export const createDispatcher = (emmiter, store) => action => {
emmiter.postMessage(action);
if (store) store.dispatch(action);
};
export const broadcastStore = (emmiter) => {
return (createStore) => (reducer, preloadedState, enhancer) => {
const store = createStore(reducer, preloadedState, enhancer)
const dispatch = createDispatcher(emmiter, store);
const subscribe = createSubscriber(emmiter, store);
return {
...store,
dispatch,
subscribe
};
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment