【问题标题】:Is it okay to have a self canceling $timeout?可以自行取消 $timeout 吗?
【发布时间】:2017-10-01 00:39:35
【问题描述】:

我想知道是否可以有一个 $timeout 在运行后自行取消。通常我看到的是人们说你应该像这样在$destroy 中取消你的$timeout

var timeout = $timeout(function () {
    // stuff
});

$scope.$on("$destroy", function(){
    $timeout.cancel(timeout);
});

但是,是否可以改为这样做:

var timeout = $timeout(function () {
    // stuff
    $timeout.cancel(timeout);
});

【问题讨论】:

  • 您建议的“是否可以”代码在它已经运行后尝试取消超时。在这一点上,没有什么可以取消的。在$destroy 事件处理程序中取消的目的是防止在销毁后运行未完成的计划超时。
  • 你在做什么没有意义,我认为你正在寻找间隔或类似的东西,那么它可能是有道理的。超时将在给定的秒数内运行您的函数,在该函数内,您的代码就像空行或返回语句一样有效,因为秒数已经过去 - 在您的情况下为 0 秒。
  • 感谢@nnnnnn 和pegla。有道理。

标签: javascript angularjs timeout


【解决方案1】:

当 DOM 元素从页面中移除时, AngularJS 将触发 $destroy 事件 范围。这让我们有机会取消任何 我们可能拥有的待定计时器。

$timeout() 返回一个承诺对象。可以将此对象提供给 $timeout.cancel() 函数以取消超时。

$scope.$on('$destroy', function(){
    $timeout.cancel(promise);
});

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 2013-01-31
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多