我有一个网络工作者,工作正常。
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);
}
}
但是明确的间隔不起作用。我错过了什么吗?
答案 0 :(得分:7)
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);
}
};
答案 1 :(得分: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);
}
}