webworker中的clearInterval不起作用

时间:2013-11-21 00:46:54

标签: javascript html5

我有一个网络工作者,工作正常。

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);
    }

}

但是明确的间隔不起作用。我错过了什么吗?

2 个答案:

答案 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);
    }

}