所以,我认为每当我在angularJS中使用$ timeout或$ interval时清理是个好习惯。我看到这个blog谈到你应该如何清理它(即$scope.$on("destroy" ... )
)。我的问题是,在回调执行后立即清理它是否可以?我有一个返回超时承诺的服务:
service.foo = function(){
var timeout = $timeout(function(){
// .. do something .. //
}, 5000);
return timeout;
};
所以,如果我打电话给这项服务,我做了类似的事情:
var promise = myService.foo().then(function(){
$timeout.cancel(promise);
});
如果在同一视图中可能多次调用service foo,这种方法是否合理?任何建议将不胜感激。
答案 0 :(得分:0)
一旦调用就取消超时。
var timeout = $timeout(function(){
//cancel timeout
}, 5000);
答案 1 :(得分:0)
如果计时器已经解决,那么如果你清理它就没有区别。它已经超过了博客警告的内容,即在范围被销毁后执行的定时器。
也就是说,正如博客所说,在$destroy
清理它是一个好习惯,因为你永远无法100%确定它会执行,用户是不可预测的。表现不会受到太大影响,你可以平静地睡觉,知道应用程序不会执行任何不需要的活动。