AngularJS:在调用回调后立即清除超时

时间:2015-02-15 04:35:21

标签: javascript angularjs promise

所以,我认为每当我在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,这种方法是否合理?任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

一旦调用就取消超时。

var timeout = $timeout(function(){
    //cancel timeout
  }, 5000);

答案 1 :(得分:0)

如果计时器已经解决,那么如果你清理它就没有区别。它已经超过了博客警告的内容,即在范围被销毁后执行的定时器。

也就是说,正如博客所说,在$destroy清理它是一个好习惯,因为你永远无法100%确定它会执行,用户是不可预测的。表现不会受到太大影响,你可以平静地睡觉,知道应用程序不会执行任何不需要的活动。