Javascript $rootscope上的AngularJS$destroy从未被调用来取消超时

Javascript $rootscope上的AngularJS$destroy从未被调用来取消超时,javascript,angularjs,timeout,destroy,Javascript,Angularjs,Timeout,Destroy,我有以下代码- 函数初始化(){ var defer=$q.defer(); var deferTimer=$q.defer(); var cancelTimeout=$timeout(函数(){ 如果(延迟!==null){ ctrlr.setProcessingParameters('XXX'); defer=ctrlr.openProgressBar(); deferTimer.resolve(); } }, 1000); deferTimer.promise.then(函数(){ var

我有以下代码-

函数初始化(){
var defer=$q.defer();
var deferTimer=$q.defer();
var cancelTimeout=$timeout(函数(){
如果(延迟!==null){
ctrlr.setProcessingParameters('XXX');
defer=ctrlr.openProgressBar();
deferTimer.resolve();
}
}, 1000);
deferTimer.promise.then(函数(){
var cancelTimeout2=$timeout(函数(){
如果(延迟!==null){
defer.resolve();
ctrlr.setProcessingParameters('请稍候…');
defer=ctrlr.openProgressBar();
}
}, 4000);
});
//处理后端服务n重新配置延迟。。。。
}
//取消$timeout服务
$rootScope.$on('$destroy',function(){
logger.log(“取消超时..计时器..”);
如果(取消超时){
$timeout.cancel(cancelTimeoutProcess);
cancelTimeout=null;
}
});
//取消$timeout服务
$rootScope.$on('$destroy',function(){
logger.log(“cancelTimeout2..timer..”)
如果(取消超时2){
$timeout.cancel(cancelTimeout2);
cancelTimeout2=null;
}
});

我没有看到记录器打印或调试器进入
$destroy
。不确定这里发生了什么。

$rootScope
在关闭或离开页面时会被销毁。那时一切都将消失,所以那时没有什么需要清理的

您要查找的是
$scope
上的
$destroy

$scope.$on('$destroy', function() {
  logger.log("cancelTimeout..timer..");
  if (cancelTimeout) {
    $timeout.cancel(cancelTimeoutProcess);
    cancelTimeout = null;
  }
});

在控制器中,
$scope.$on(“$destroy”…
将在控制器被销毁(而不是整个应用程序)时被调用,当前的
$scope
与之关联。

我不知道为什么它没有进入
$rootScope.$on(“$destroy”
函数,但肯定
cancelTimeout
cancelTimeout2
会抛出一个错误,因为它们的作用域是
initialize
函数?@George如果我将其作为全局变量添加,应该可以解决问题吧?我听说我们不应该在任何fn中使用取消计时器逻辑。
$rootScope
当您关闭或离开页面时会被销毁。届时所有内容都将消失,因此没有任何需要清理的内容。@tanmay那么我如何取消/终止这些超时?@Smitha您无权访问
$scope