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

AngularJS: Clean up timeout right after callback was called

所以,我想说,每当我在 angularJS 中使用 $timeout 或 $interval 时,清理是个好习惯。我看到这个 blog 谈到了你应该如何清理它(即 $scope.$on("destroy" ... ))。我的问题是,是否可以在执行回调后立即清理它?我有一项服务 returns 承诺超时是这样的:

service.foo = function(){

  var timeout = $timeout(function(){
    // .. do something .. //
  }, 5000);

  return timeout;
};

所以如果我调用此服务,我会执行如下操作:

var promise = myService.foo().then(function(){
  $timeout.cancel(promise);
});

如果服务 foo 可能在同一视图中被多次调用,这种方法是否合理?如有任何建议,我们将不胜感激。

调用超时后取消。

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

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

也就是说,正如博客所建议的那样,在 $destroy 上清理它是一个很好的做法,因为您永远无法 100% 确定它会执行,用户是不可预测的。性能不会受到太大影响,您可以安心入睡,因为您知道该应用不会执行任何不需要的活动。