首页 > 解决方案 > 内联加载的 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被调用时,它应该向工作人员发布一条消息,并且工作人员应该接收它。工人永远不会收到它。debuggerinset-hit-percentages.worker.js永远不会被击中, 也不会console.log

标签: javascriptwebpackvue.jsweb-worker

解决方案


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


推荐阅读