Skip to content

Instantly share code, notes, and snippets.

@Makio64
Last active May 22, 2018 08:49
Show Gist options
  • Save Makio64/cc9fae0770ef56e6aaf756bfe5d8d871 to your computer and use it in GitHub Desktop.
Save Makio64/cc9fae0770ef56e6aaf756bfe5d8d871 to your computer and use it in GitHub Desktop.
webworker from function and webworkerImageLoad
function createWorker(f) {
return new Worker(URL.createObjectURL(new Blob([`(${f})()`])));
}
const worker = createWorker(() => {
self.addEventListener('message', e => {
let src = e.data
fetch(src)
.then(response => response.blob())
.then(blob => createImageBitmap(blob))
.then(bitmap => {
self.postMessage({ src, bitmap }, [bitmap]);
});
});
});
export default function webworkerImageLoad(src) {
return new Promise((resolve, reject) => {
function handler(e) {
if (e.data.src === src) {
worker.removeEventListener('message', handler);
if (e.data.error) {
reject(e.data.error);
}
resolve(e.data);
}
}
worker.addEventListener('message', handler);
worker.postMessage(src);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment