我正在尝试将一些密集的数据处理工作转移到React应用程序中的WebWorker。如果我在onmessage处理程序中使用promise或async / await调用任何异步函数,则会得到:
ReferenceError: _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___未定义默认值
这是我的工人:
const DataSyncWorker = () => {
self.doSyncing = async () => {
return null;
};
self.onmessage = e => {
if (!e) return;
console.log(`worker received message in listener callback: ${e.data}`);
self.doSyncing();
self.postMessage(`SYNC_COMPLETE`);
};
};
export default DataSyncWorker;
以及用于创建Worker的安装文件:
export default class WebWorker {
constructor(worker) {
const code = worker.toString();
const blob = new Blob([`(${code})()`]);
return new Worker(URL.createObjectURL(blob));
}
}
并调用它:
import DataSyncWorker from './workers/DataSyncWorker';
import WebWorker from './workers/workerSetup';
const App = () => {
const dataSyncWorker = new WebWorker(DataSyncWorker);
dataSyncWorker.postMessage(`START_SYNC`);
dataSyncWorker.addEventListener(`message`,event => {
console.log(`index: message from worker: ${e.data}`);
});
}
如果我将doSyncing更改为非异步,则一切正常。这是一个简化的示例,我已经证实它仍然表现出相同的行为。但是我无法使用axios或任何其他异步功能。我的理解是应该可行的,并且鉴于错误,我想知道我的问题是否与babel / webpack有关。也许我在做其他错误。任何帮助是极大的赞赏。谢谢。