oboe.js
oboe.js copied to clipboard
Oboe.js cannot be used in a web worker because window is not defined
trafficstars
Line 2774 references window.location instead of location
Line 2788 references window.setTimeout instead of setTimeout
Simply changing these two lines so that they refer to the default global object instead window makes oboe.js usable in a web worker.
Simple example web worker, enabled by this patch:
importScripts('/js/oboe-browser.min.js');
self.onmessage = (evt) => {
const cmd = evt.data.cmd;
const url = evt.data.url;
switch (cmd) {
case 'start':
return start(url);
}
};
const start = (url) => {
console.log('worker started');
let chunk = [];
oboe(url)
.node('![*]', (item) => {
if (item) {
chunk.push(item);
if (chunk.length >= 1000) {
self.postMessage({ cmd: 'chunk', chunk: chunk });
chunk = [];
}
}
return oboe.drop;
})
.done((_) => {
self.postMessage({ cmd: 'done', chunk: chunk });
})
.fail((res) => {
if (res.thrown) {
console.error(res.thrown.stack);
self.postMessage({ cmd: 'error', error: res.thrown.message });
} else {
console.error(res);
self.postMessage({ cmd: 'error', error: 'network error' });
}
});
};
ping @jimhigson