1

我以前使用过Worker 对象,它非常简单,尤其是在教程中。

因此,下一步自然是与 SharedWorkers 合作。我把它记下来了,但现在看来 SharedWorker 没有正确响应。我向 SharedWorker 发送了一个 postMessage,在我的代码中我让 SharedWorker 发回相同的文本,有点像回声效果。

不幸的是,SharedWorker 只返回从主程序发送的消息的第一个字母,并且不会将“Background”字符串记录到控制台以让我知道 SharedWorker 正在运行。“安装完成”日志消息也证明 SharedWorker 已创建。

代码...

主要的 HTML 文件...

<html>
<head>
<title>Test</title>
</head>
<body>
<script>
var w = new SharedWorker('sharedworker.js');
w.port.start();
w.port.postMessage("start");
w.port.onmessage = function(e){
  console.log(e.data);
}; 
console.log("Setup complete.");
</script>
</body>
</html>

SharedWorker 脚本...

onconnect = function(e){
  var port = e.ports[0];
  port.addEventListener('message', function(e){
    port.postMessage(e.data[0]);
  });
  port.start();
  console.log("Background.");
}

我究竟做错了什么?

4

1 回答 1

0

不幸的是 SharedWorker 只返回从主程序发送的消息的第一个字母

删除[0]对正在读取的字符串的引用。目前它将字符串作为数组连接并且只返回第一个字符。

port.postMessage(e.data); // versus  port.postMessage(e.data[0]);

并且不会将“Background”字符串记录到控制台以让我知道 SharedWorker 正在运行

我不是专家,但我会猜测一下。(我在文档中看不到任何明显的支持,而且我自己之前没有使用过 SharedWorkers。)从多处理的角度来看,这就是我期望 SharedWorkers 做的事情——SharedWorker 的上下文是完全独立的,console不存在于其范围内。

在另一个关于调试的 SO 线程上有一些可能有用的答案,可能会帮助您继续调试:如何调试网络工作者

于 2017-08-11T17:30:10.107 回答