javascript - 内联加载的 Web Worker 与 worker-loader 不工作
问题描述
我有以下代码:
src/store/modules/outcome-analyzer/outcome-analyzer.js
import Worker from 'worker-loader!./set-hit-percentages.worker.js';
// ...
let actions = {
setHitPercentages: function (context) {
let worker = new Worker();
// let players = resultsMutations.constructPlayersForSetHitPercentages(context.state);
// worker.postMessage({
// message: 'get hit percentages',
// players: players,
// });
worker.postMessage({
message: 'test',
value: 'foobar',
});
worker.onmessage = function (e) {
if (e.data.message === 'finished') {
context.commit('outcomeAnalyzer/setHitPercentages', e.data.hitPercentages);
}
};
worker.terminate();
},
};
src/store/modules/outcome-analyzer/set-hit-percentages.worker.js
self.addEventListener('message', function (e) {
debugger;
if (e.data.message === 'test') {
console.log(e.data.value);
}
else if (e.data.message === 'get hit percentages') {}
});
当setHitPercentages
被调用时,它应该向工作人员发布一条消息,并且工作人员应该接收它。工人永远不会收到它。debugger
inset-hit-percentages.worker.js
永远不会被击中, 也不会console.log
。
- 在
setHitPercentages
调试器内部,我看到它Worker
已定义。我还看到它是在运行worker
后定义的。has和方法,它继承了其他的东西,比如.let worker = new Worker();
worker
onmessasge
onerror
postMessage
- 我
worker-loader
在我的node_modules
. 在package.json
我有"worker-loader": "^1.1.1"
. - 我在我的代码的另一部分使用了一个工人,它可以工作。有效的代码似乎与我在此处发布的无效代码完全相似,包括
import Worker from 'worker-loader!./xxx-yyy-zzz.worker.js';
部分。 - 我正在使用 Chrome。我也尝试过 Safari,但它也没有在那里工作。
- 当我重现问题时,我不会启动另一个工人,但这个答案说多个工人不应该引起问题。(我也尝试过启动另一个worker,终止它,然后运行有问题的代码,在那种情况下问题仍然存在。当我注释掉另一个worker的代码时,我也继续有问题。)
- 这是一个以vue-webpack-boilerplate 开头的 Vue 应用程序。
解决方案
你放错了你的worker.terminate();
,你可能想要在你的onmessage
处理程序中。就像现在一样,工人正在生成,但几乎立即被杀死。
推荐阅读
- php - 速记检查变量是否设置并将它们回显到输入字段的值
- android - 在应用程序上将 android 联系人与注册用户链接
- python - Python 3.x:从两个字典创建数据框
- javascript - 了解后端
- kubernetes - GKE 集群无法从同一项目(GitLab Kubernetes 集成)中的 GCR 注册表中提取(ErrImagePull):为什么?
- crystal-lang - 输出当前光纤,直到 FD 有一些数据
- javascript - 如何使用 babel-loader 转换 node_modules 模块?
- matlab - 如何将 .bib 文件读取为文本并将其分隔为文献计量目标的字段?
- spring-cloud-contract - Spring Cloud Contract 无法从 Nexus 查找/下载工件,存根模式远程
- javascript - 随机选择数组中的元素一次,同时跟踪它们的原始位置 - JavaScript