javascript - 内联加载的 Web Worker 与 worker-loader 不工作

标签 javascript webpack vue.js web-worker

我有以下代码:

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 被调用时,它应该向工作人员发送一条消息,并且工作人员应该接收它。 worker 永远不会收到它。 set-hit-percentages.worker.js 中的 debugger 永远不会被命中,console.log 也不会被命中。

  • setHitPercentages 调试器中,我看到定义了 Worker。我还看到 worker 是在 let worker = new Worker(); 运行之后定义的。 workeronmessasgeonerror 方法,它继承了其他东西,比如 postMessage
  • 我有worker-loader在我的 node_modules 中。在 package.json 我有 "worker-loader": "^1.1.1"
  • 我在代码的另一部分使用了一个 worker,它工作正常。有效的代码似乎与我在此处发布的无效代码完全相似,包括 import Worker from 'worker-loader!./xxx-yyy-zzz.worker.js'; 部分。
  • 我正在使用 Chrome。我也尝试过 Safari,但它在那里也不起作用。
  • 当我重现问题时,我没有启动其他工作人员,而是启动了 this answer说多个 worker 不应该引起问题。 (我也试过启动另一个 worker ,终止它,然后运行有问题的代码,在那种情况下问题仍然存在。当我注释掉另一个 worker 的代码时,我也继续有问题。)
  • 这是一个以 vue-webpack-boilerplate 开头的 Vue 应用程序.

最佳答案

您放错了 worker.terminate();,您可能希望在您的 onmessage 处理程序中使用它。就像现在一样, worker 正在生成,但几乎立即被杀死。

关于javascript - 内联加载的 Web Worker 与 worker-loader 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51333437/

相关文章:

javascript - jQuery Socialist 设置问题

javascript - 空字符串到底是什么? ( "")

css - 使用 JS 小部件时忽略父样式

javascript - 找不到 bundle.js

javascript - Uncaught ReferenceError : $ is not defined Webpack and embedded script

javascript - 如何在我的 vue 模板脚本中有条件地调用 apollo 客户端?

javascript - 未找到模块 : You attempted to import which falls outside of the project src/directory. 不支持 src/之外的相对导入

java - Spring - 获取所有可解析的消息键

vue.js - 在另一个组件中从一个 Vue 单个组件获取数据?

arrays - 如何将从父组件传递的 prop 推送到子组件中的数组?