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

Web Worker loaded inline with worker-loader not working

我有以下代码:

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

也不会被命中

您放错了 worker.terminate();,您可能想要在 onmessage 处理程序中放置它。就像现在一样,工人正在生成,但几乎立即被杀死。