2017-03-08 18 views
0

Googleマップのマーカーをクリックしてウェブワーカーを開始しています。クリックイベントが発生すると、そのマーカーのID(私の場合はsensorid)が関数に渡され、ワー​​カーが開始され、ワー​​カーはそのIDに対してデータを取得します。すべてがうまくいっています。しかし、再びイベントが発生したとき、またはその関数が新しいsensoridで呼び出されたときに、ワーカーを再起動したい。 ワーカーを開始する機能コード。コンソールから同じイベントが発生した場合、ウェブワーカーを終了して再起動してください。

function showgraph(sensorid) { 
       console.log("showing graph of " + sensorid); 
       var graphworker = undefined; 
       if (typeof (graphworker) == "undefined") { 


        graphworker = new Worker('worker/graphworker.js'); 
        graphworker.onmessage = function (event) { 
         // other task will happen there 

        } 

        graphworker.postMessage(sensorid); 
       } 
       else { 

        graphworker.terminate(); 
        graphworer = undefined; 
        console.log("worker is stoped"); 
        //but my previuos worker is not terminating here 
       } 


      } 

出力は

enter image description here

である私のワーカーのコードは、私がコードに従うことによって、この問題を解決していた

self.addEventListener('message', function (sensorid) 
    { 
    var t = setInterval(fun, 3000); 
     function fun() { 
     var id = sensorid.data; 
    console.log("form graph worker"+ id); 

},false); 

答えて

0

です。しかし、私はそう

 var graphworker= undefined;//global variable 
    function showgraph(sensorid) { 

       if (typeof (graphworker) == "undefined") { 


        startGraphWorker(sensorid); 
       } 
       else { 
        graphworker.terminate(); 

        startGraphWorker(sensorid); 
       } 




      } 

      function startGraphWorker(sensorid) 
      { 
       graphworker = new Worker('worker/graphworker.js'); 
       graphworker.onmessage = function (event) { 
        // other task will happen there 


       } 

       graphworker.postMessage(sensorid); 

      } 
を行うに任意のより良い方法があるかどうかを知りたいです
関連する問題