首页 > 解决方案 > 无法从网络工作者那里获取数据

问题描述

我有以下forEach:

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;
  });
}

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

标签: javascriptwebweb-workerworker

解决方案


推荐阅读