2013-11-21 23 views
1

我有一個webworker,它的工作正常。webworker中的clearInterval不起作用

webworker.js:

//portion of webworker.js 
self.onmessage = function(evt){ 
    if(evt.data == "start"){ 
     var i = 0; 
     var mytimer = setInterval(function(){ 
      i++; 
      postMessage(i); 
     },1000); 
    } 

    if(evt.data == "stop"){ 
     clearInterval(mytimer); 
    } 

} 

,但明確的時間間隔不工作。我錯過了什麼嗎?

+1

爲myTimer之前取出'var'部分。 – inf3rno

回答

6

mytimer是本地的你的功能。如果你想讓它在調用堅持到onmessage,你需要把它移動到一些外部範圍:

var mytimer; 

self.onmessage = function(evt) { 
    if (evt.data == "start") { 
     var i = 0; 

     mytimer = setInterval(function() { 
      i++; 
      postMessage(i); 
     }, 1000); 
    } else if (evt.data == "stop") { 
     clearInterval(mytimer); 
    } 
}; 
0

正如其他人所說,這個問題是與mytimer變量的作用域。

如果你想避免弄亂全局命名空間,你可以將其存儲爲使用this hack靜態變量:

self.onmessage = function(evt){ 
    if(evt.data == "start"){ 
     var i = 0; 
     arguments.callee.mytimer = setInterval(function(){ 
      i++; 
      postMessage(i); 
     },1000); 
    } 

    if(evt.data == "stop"){ 
     clearInterval(arguments.callee.mytimer); 
    } 

} 
+1

這不是很乾淨。鑑於對網絡工作者的支持,你不能至少使用一個命名函數嗎? – Ryan

+0

啊,好點。 –