无法从网络工作者获取数据

时间:2020-06-12 22:06:30

标签: javascript web web-worker worker

我有以下每个方面:

hosts.forEach((host) => {
  filterByHost(host);
});

如您所见,forEach调用了以下我假装使用网络工作者的方法

function filterByHost(host) {
  let sortedHost = [];
  const filterHost = data.filter((element) => element.host.includes(host));
  if (window.Worker) {
    const worker = new Worker('utils.js');

    worker.postMessage({ cmd: 'sortHost', filterHost });

    worker.onmessage = function (event) {
      switch (event.data.cmd) {
        case 'sortHost':
          servers = {
            ...servers,
            [host]: event.data.data,
          };
          break;
        default:
          break;
      }
    };
  }
}

我的utils.js文件中的代码如下:

self.addEventListener(
  'message',
  function (event) {
    switch (event.data.cmd) {
      case 'uniqueHosts':
        postMessage({ cmd: 'other', data: other(event.data.data) });
        break;
      case 'sortHost':
        postMessage({
          cmd: 'sortHost',
          data: sortHost(event.data.filterHost),
        });
        break;
      default:
        break;
    }
  },
  false
);

function other(data) {
  return bla bla bla;
}

function sortHost(filterHost) {
  return filterHost.sort((a, b) => {
    if (a.apdex < b.apdex) {
      return 1;
    }
    if (a.apdex > b.apdex) {
      return -1;
    }
    return 0;
  });
}

正如您所看到的,我试图使用Web Worker来对一大堆对象进行排序,并且该Worker工作时,它返回一个排序后的数组,但是当我尝试将结果散布到我拥有的服务器中并清空时数组,就像当forEach调用new Worker时,每件事都重新启动,我找不到原因

0 个答案:

没有答案