const blob = new Blob([` self.onmessage = function() { const processor = { cache: new Map(), process(data) { return data.map(x => x * 2); } }; processor.cache.set('results', processor.process([1,2,3])); processor.cache.set('processFn', processor.process); self.postMessage({ type: 'DONE', state: processor.cache }); }; `], { type: 'application/javascript' }); const worker = new Worker(URL.createObjectURL(blob)); worker.postMessage('start'); worker.onerror = (e) => console.error('Worker error:', e); worker.onmessage = (e) => console.log(e.data);
The processor.cache is a Map object, which is not serializable. To fix this, you can convert the Map to a serializable object before posting it to the main thread.
const blob = new Blob([` self.onmessage = function() { const processor = { cache: new Map(), process(data) { return data.map(x => x * 2); } }; processor.cache.set('results', processor.process([1,2,3])); // Convert Map to serializable object, skip functions const serializableState = { type: 'DONE', state: Object.fromEntries(processor.cache) }; self.postMessage(serializableState); }; `], { type: 'application/javascript' }); const worker = new Worker(URL.createObjectURL(blob)); worker.postMessage('start'); worker.onmessage = (e) => console.log(e.data);