gpt4 book ai didi

javascript - 将函数传递给使用 webpack 导入类的 web worker

转载 作者:行者123 更新时间:2023-12-03 16:27:06 25 4
gpt4 key购买 nike

我想将一个简单的函数传递给网络 worker ,而不是直接在网络 worker 中编写它。我知道这不是直接可能的,但在许多情况下,您可以通过调用 toString() 来“解决”这个问题。在你的函数上调用 eval在那个字符串上,一旦它在 worker 中。

我在其他地方没有看到的警告是这个函数使用从另一个模块导入的类。 (我正在使用 webpack。)

取这个函数:() => new MyClass();
调用toString()它给出了这个:

() => {
return new _MyClass__WEBPACK_IMPORTED_MODULE_5__["MyClass"]();
}

这是有道理的,因为 MyClass是从另一个模块导入的。问题是调用 eval在这个 worker 中给出了一个错误:

ReferenceError: _MyClass__WEBPACK_IMPORTED_MODULE_5__ is not defined



同样,这是有道理的,因为该类没有被导入到 worker 的模块中。但是有什么办法可以解决这个问题吗?该函数引用的类在编写 worker 时是未知的。

不出所料,无论是使用 worker-loader 还是使用像这样的对象 URL 创建 worker,我都会得到这个结果:
new Worker(URL.createObjectURL(new Blob([functionString])));

我尝试在传递给工作人员的函数中使用动态导入,但这仍然失败,因为工作人员似乎不希望进行动态导入:
() => {
return import ('./MyClass')
.then(module => new module.MyClass());
}

ReferenceError: __webpack_require__ is not defined



有什么聪明的方法可以解决这个问题,还是我应该放弃并期望为我想要实例化的每个类编写一个不同的 worker ?

最佳答案

我得出的结论是,这不能以一种健壮且非 hacky 的方式完成,尽管我很高兴被证明是错误的。

我将为每个我想实例化的类使用不同的工作人员,至少现在是这样。

关于javascript - 将函数传递给使用 webpack 导入类的 web worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57964817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com