如何解决如何在带有React的Webworker中使用本地类?
我正在工作一个Webworker,想使用一个本地类。使用(主要是)标准Webpack设置在React应用程序中创建并使用该worker。这是基本代码:
/* eslint-disable no-restricted-globals */
/* eslint-disable @typescript-eslint/explicit-function-return-type */
/* eslint-disable @typescript-eslint/explicit-member-accessibility */
/* eslint-disable no-eval */
class Executor {
run(code) {
let result = "";
let isError = false;
try {
result = eval(code);
if (typeof result === "object") {
result = JSON.stringify(result);
}
} catch (error) {
result = error.toString();
isError = true;
}
return [result,isError];
}
}
export default () => {
try {
const executor = new Executor();
} catch (e) {
console.log("Webworker startup error: " + e);
}
};
以及当我创建Webworker时:
public componentDidMount(): void {
const code = runtime.toString();
const blob = new Blob(["(" + code + ")()"]);
this.worker = new Worker(URL.createObjectURL(blob));
this.worker.onmessage = this.handleWorkerMessages;
}
我得到了错误:
Webworker启动错误:ReferenceError:未定义执行程序
要使网络工作者识别该类,还需要什么?
我还尝试将类放入一个外部文件中,然后从那里导入它,但这仅使错误有所改变:
Webworker启动错误:ReferenceError:_ScriptingExecutor__WEBPACK_IMPORTED_MODULE_0__未定义
解决方法
要了解发生了什么,您必须查看从导入模块生成的字符串(在将其转换为Blob之前)。它仅包含默认的导出代码(即匿名函数)。该类不包括在内,因此,当您将代码加载到工作程序中时,它将错过该类。
因此,请勿使用用于工作者代码的模块,或使用脚本的URL并将其提供给工作者。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。