角网络工作者不工作

时间:2016-05-23 14:23:44

标签: javascript angularjs timer setinterval web-worker

我正在尝试创建一个倒数计时器。

我正在使用web-worker,它使用setInterval更改变量的值,然后通过postMessage将其发送到脚本文件,然后更新范围变量。

成功更新变量10-15次。 但之后会停止更新。

我已创建此plunkr检查85后左右停止工作的倒计时值。

的script.js

angular
  .module('App', [])
  .controller('MainCtrl', ['$scope', '$window', function($scope, $window) { 
      $scope.time = 100;

      var worker = new Worker('worker.js');


      worker.onmessage = function(e) {
      $scope.time = e.data.time;
      $scope.$apply();
      };

     worker.postMessage($scope.time);

}]);

worker.js

self.onmessage = function(e) {
  var time = e.data;

  var timer = setInterval(toDo, 1000);


  function toDo() {

    time = time - 1;
    //console.log(time);
    postMessage({
    time: time
});
}



}

1 个答案:

答案 0 :(得分:0)

问题是worker在一段时间后变得未定义(也许是js垃圾收集器)。

为避免这种情况,您可以将工作人员作为$ scope的一部分。

更改此行:

 var worker = new Worker('worker.js');

对此:

 $scope.worker = new Worker('worker.js');

this分叉中,你使用了plunkr。