2017-08-11 7 views
1

私はWorker objects beforeで作業しましたが、特にチュートリアルではかなり簡単です。Javascript SharedWorkerがメインプログラムと正しく通信していません

自然に次のステップはwork with SharedWorkersになります。私はそれを持っているが、今はSharedWorkerが正しく応答していないようだ。私はSharedWorkerにpostMessageを送ります。私のコードでは、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を使用していませんでした)。マルチプロセッシングの観点から、これはSharedWorkerがやるべきことです - SharedWorkerのコンテキスト完全に分離されている場合、consoleはそのスコープに存在しません。

今後のデバッグに役立つかもしれない、デバッグに関する別のSOスレッド上でいくつかの可能性が役に立つ答えがあります:How to debug web workers

+1

チケットだこれは! port.postMessage(e.data [0]); w.port.postMessage([data1、data2])などの配列を渡す場合に使用されます。 –

関連する問題