我曾与Worker objects before合作,而且非常简单,特别是在教程中。
自然,下一步将是work with SharedWorkers。我已经把它搞定了,但现在似乎SharedWorker没有正确响应。我将一个postMessage发送到SharedWorker,在我的代码中,我让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.");
}
我做错了什么?
答案 0 :(得分:0)
不幸的是,SharedWorker只返回从主程序发送的消息的第一个字母
将[0]
放在对正在读取的字符串的引用上。目前,它将字符串作为数组连接,只返回第一个字符。
port.postMessage(e.data); // versus port.postMessage(e.data[0]);
并且没有向“控制台”记录“后台”字符串,以便让我知道SharedWorker正在运行
我不是专家,但我会猜测。 (我在文档中看不到任何显而易见的内容,我之前没有使用过SharedWorkers。)从多处理的角度来看,这是我期望SharedWorkers做的事情 - SharedWorker的上下文是完全独立的,console
在其范围内不存在。
在另一个关于调试的SO线程上有一些可能有用的答案可能有助于您进行调试:How to debug web workers