我有以下每个方面:
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时,每件事都重新启动,我找不到原因