【问题标题】:AngularJS: Clean up timeout right after callback was calledAngularJS:调用回调后立即清理超时
【发布时间】:2015-02-15 04:35:20
【问题描述】:

所以,我想说,每当我在 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);
});

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

【问题讨论】:

    标签: javascript angularjs promise


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      一旦被调用就取消超时。

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

      【讨论】:

      • 哦,这也行得通,但我问的是,这样做是好的还是合理的做法。我没有问在哪里/如何清理它
      • 好吧,我们总是在执行后立即清理它。为什么要保留它直到你的范围被破坏。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 2016-10-13
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多