2017-08-11 60 views
1

正常通信,這是非常簡單的,特別是與教程。的Javascript SharedWorker沒有與我同<a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers" rel="nofollow noreferrer">Worker objects before</a>工作的主要程序

所以很自然的下一步將是work with SharedWorkers。我已經明白了,但現在看來SharedWorker沒有正確響應。我發的postMessage到SharedWorker,並在我的代碼我有SharedWorker回發相同的文字,有點像回聲效果。

不幸的是,SharedWorker只返回主程序發送消息的第一個字母,而不會記錄到控制檯的「背景」的字符串,讓我知道了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

不幸的是,SharedWorker只返回主程序

[0]上參照串被讀取發送的消息的第一個字母。目前它將字符串作爲數組接口並僅返回第一個字符。

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

,不登錄到控制檯的「背景」的字符串,讓我知道了SharedWorker運行

我不是專家,但我會採取一種猜測。 (我看不到任何明顯的文檔來支持這一行動,我以前沒使用SharedWorkers自己。)從多處理的角度來看,這是我所期待SharedWorkers做的事情 - 在SharedWorker的背景下是完全獨立的,其範圍內不存在console

還有另一個可能的一些有用的答案SO線程調試方面,可以幫助您進行調試前進:How to debug web workers

+1

這就是門票! port.postMessage(e.data [0]);如果要傳遞的陣列,如w.port.postMessage被使用([DATA1,DATA2])。 –

相關問題