Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-递归函数禁用$scope.on(';destroy';)_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

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'
,就是这样!亚历克斯比你快了几分钟,不过还是要谢谢你……我已经看了两天了,完全没有看到这个,认为问题要复杂得多。非常感谢你!关于时间间隔:我实际上是从一个时间间隔来更改它,因为内部方法执行一个后端请求,在连接速度较慢的情况下,这会导致许多请求被发送,即使仍然有一些挂起的请求。