2016-05-23 3 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

было бы также полезно инкапсулировать общение с пользователем в Угловую службу и связаться с ним через контроллер через его интерфейс – shershen

Смежные вопросы