Javascript AngularJS-递归函数禁用$scope.on(';destroy';)
我有一个递归函数,它调用另一个异步函数,在解析承诺后,几秒钟后再次调用它自己:Javascript AngularJS-递归函数禁用$scope.on(';destroy';),javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我有一个递归函数,它调用另一个异步函数,在解析承诺后,几秒钟后再次调用它自己: $scope.gamePolling = function () { if ($scope.getGames) { $scope.getGameData().then(function () { $timeout(function () { $scope.gamePolling(); }, 3000); }); } }; 更改路由/状态(使用ui路由器
$scope.gamePolling = function () {
if ($scope.getGames) {
$scope.getGameData().then(function () {
$timeout(function () {
$scope.gamePolling();
}, 3000);
});
}
};
更改路由/状态(使用ui路由器)时,我认为应该销毁$scope,以便使用以下命令关闭递归函数:
$scope.$on('destroy', function () {
$scope.getGames = false;
});
但是,在下一页上,gamePolling函数会不断调用自己,因为destroy中的断点永远不会被命中
所以我的问题是,为什么没有触发$destroy事件?
p、 删除$timeout时也会发生这种情况,所以问题一定是递归
我通过关闭$stateChangeStart中的gamePolling()解决了这个问题:
$scope.$on('$stateChangeStart', function () {
$scope.getGames = false;
});
因此轮询停止,但是$destroy事件似乎仍然没有被触发
作为一个小测试,在状态/控制器a中,我将当前$scope分配给$rootScope变量,以便检查它是否在状态/控制器B中被销毁:$rootScope.testScope=$scope代码>
在控制器B中检查$rootScope.testScope.$$destromed
时,它返回true。看起来控制器A的$scope已成功销毁。但是,在$rootScope.testScope中,我仍然可以访问分配给$scope的变量 这是“$destroy”事件,而不是“destroy”
这很有趣,因为您使用正确的名称提及事件,并且在代码中缺少$sign前缀
希望有帮助
更新:如果您允许,我建议您使用间隔,而不是超时+递归函数。然后,您可以在$destroy事件处理程序中“终止”间隔。一杯咖啡可能会。。尝试将'destroy'
更改为'destroy'
,就是这样!亚历克斯比你快了几分钟,不过还是要谢谢你……我已经看了两天了,完全没有看到这个,认为问题要复杂得多。非常感谢你!关于时间间隔:我实际上是从一个时间间隔来更改它,因为内部方法执行一个后端请求,在连接速度较慢的情况下,这会导致许多请求被发送,即使仍然有一些挂起的请求。