Skip to content

Instantly share code, notes, and snippets.

@daniel12fsp
Created October 12, 2019 09:22
Show Gist options
  • Save daniel12fsp/7f6df033a69b084a713d93d9edd6fbad to your computer and use it in GitHub Desktop.
Save daniel12fsp/7f6df033a69b084a713d93d9edd6fbad to your computer and use it in GitHub Desktop.
WebWorkerAndSaga
import { all, call, take } from 'redux-saga/effects';
import { takeLatest } from 'redux-saga/effects'
import { createStore, compose, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga'
export function WebWorker() {
const code = `
self.addEventListener('message', function (e) {
const str = e.data
self.postMessage(str.toUpperCase());
}, false);
`
const blob = new Blob(
[
code
],
{ type: 'text/javascript' }
);
return new Promise((resolve, reject) => {
const url = window.URL.createObjectURL(blob);
const worker = new Worker(url);
worker.postMessage("valor qualquer")
worker.addEventListener('message', (e) => {
worker.terminate();
resolve(e.data)
}, false);
});
}
export function* webWorkerSaga() {
const worker = yield call(WebWorker);
console.log({ worker });
}
const sagaMiddleware = createSagaMiddleware();
const reducer = () => ({});
export const store: any = createStore(reducer, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(webWorkerSaga)
store.dispatch({ type: "WEB_WORKER_RUN" })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment