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% 确定它会执行,用户是不可预测的。性能不会受到太大影响,您可以安心入睡,因为您知道该应用不会执行任何不需要的活动。
所以,我想说,每当我在 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% 确定它会执行,用户是不可预测的。性能不会受到太大影响,您可以安心入睡,因为您知道该应用不会执行任何不需要的活动。