我正在尝试创建一个倒数计时器。
我正在使用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 :(得分:0)
问题是worker
在一段时间后变得未定义(也许是js垃圾收集器)。
为避免这种情况,您可以将工作人员作为$ scope的一部分。
更改此行:
var worker = new Worker('worker.js');
对此:
$scope.worker = new Worker('worker.js');
在this分叉中,你使用了plunkr。