2016-05-23 447 views
0

我想創建一個倒數計時器。角網絡工作者不工作

我正在使用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 
}); 
} 



} 

回答

0

問題是worker成爲一段時間(也許JS垃圾收集器)後不確定。

爲了避免這種情況,您可以將工作人員作爲$ scope的一部分。

改變這一行:

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

這一個:

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

this叉,你plunkr工作。

+0

將工作者間通信封裝到Angular服務中並通過其接口與控制器進行通信也是很好的 – shershen