javascript - 无法在 'postMessage' : 2 arguments required, 上执行 'Window' 但只有 1 个存在

标签 javascript html web worker

我目前有一个 web worker 试图接受 1 个参数

wworker = postMessage([textCoords[0], textCoords[1], latlong[0], latlong[1]]);
wworker.addEventListener('message', findDistance);

但是,控制台上不断弹出一个错误:“未捕获的类型错误:无法在‘窗口’上执行‘postMessage’:需要 2 个参数,但只有 1 个存在。” AFAIK postMessage 第二个参数是可选的。

这是我的 worker.js

var distance;

function findDistance(event) {
var destinationLat, destinationLon, originLat, originLon, haversineLat, haversineLon, thetaLat, thetaLon;
destinationLat = event.data[0] * (Math.PI/180);
destinationLon = event.data[1] * (Math.PI/180);
originLat = event.data[2] * (Math.PI/180);
originLon = event.data[3] * (Math.PI/180);
thetaLat = destinationLat - originLat;
thetaLon = destinationLon - originLon;
haversineLat = (1-Math.cos(thetaLat))/2;
haversineLon = (1-Math.cos(thetaLon))/2;
distance = 2 * 6376 * Math.asin(Math.sqrt(haversineLat + Math.cos(originLat) * Math.cos(destinationLat) * haversineLon));
postMessage(distance);
}

self.addEventListener('message', findDistance);

最佳答案

您没有在 Worker 上调用 .postMessage();您还在 for 循环的每次迭代中附加了一个新的 message 事件。将 wworker.addEventListener('message', findDistance); 移到 for 循环之外,在 for< 中调用 wworker.postMessage()/ 循环

var wworker = new Worker("assets/scripts/webworker.js");
wworker.addEventListener('message', findDistance);

for(i=0;i<lines.length;i++){
    var temp = lines[i].split(",");     

    wworker.postMessage([textCoords[0], textCoords[1], latlong[0], latlong[1]]);

    textCoords.shift();
    textCoords.shift();
}

关于javascript - 无法在 'postMessage' : 2 arguments required, 上执行 'Window' 但只有 1 个存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42614150/

相关文章:

javascript - 如何移动该代码上的矩形 "var canvas1"?

html - 100%高度容器通过绝对定位被推出IE视口(viewport)

php - 复选框数组 html php

html - 我怎样才能使 HTML a href 超链接打开一个新窗口?

http - 测试 Web 应用程序 URL

javascript - Internet Explorer Web 浏览器中不显示内容

javascript - 在 CanvasJS 组合图中禁用工具提示

javascript - 为什么此 Javascript 行只包含函数名称和函数调用?

javascript - 绑定(bind)到指令属性

javascript - 只有最后一个单选按钮触发 checkCBfont() 函数