【问题标题】:Changing AngularJS $interval delay depending on time根据时间更改 AngularJS $interval 延迟
【发布时间】:2016-10-14 18:23:51
【问题描述】:

我正在尝试根据一天中的时间更改间隔的延迟。每 30 分钟,我想自动(随机)从预定义的列表中推送一篇博文,而不需要 UI 事件触发。但是,在晚上,我想减慢推高(改变延迟)的速度,以免“阻塞”用户界面。我的代码:

var campaign_post_ids = [
  // some array
];
var today = new Date();
var hourNow = today.getHours();
var stop = $interval(function() {
}, 100);

function pushBlog(blog_id) {
  blog_id = campaign_post_ids[Math.floor(Math.random() * campaign_post_ids.length)];
  Blog.push_up(blog_id); //calling the push_up function in the Blog service
}

if (hourNow > 9 && hourNow < 23) {
  $interval.cancel(stop);
  $interval(pushBlog, 60000 * 30); //every 30 minutes
} else {
  $interval.cancel(stop);
  $interval(pushBlog, 60000 * 120); //every 120 minutes
}

俯卧撑效果很好,但是延迟的变化不起作用;在夜间,它每 30 分钟(而不是 120 分钟)不断推升。我做错了什么?

【问题讨论】:

    标签: angularjs setinterval


    【解决方案1】:

    首先你错过了取消间隔的一部分。为了取消间隔,您应该将其声明为变量并将其用作$interval.cancel() 的参数。

    例如:

    var stop = $interval(function() {
      console.log('running')
    }, 100);
    
    $interval.cancel(stop)
    

    此外,当小时数为 9 或 23 时,使用此代码根本不会运行任何时间间隔。这是设计使然吗?您可能想要删除 else if 块并在初始化新的间隔之前简单地清除任何先前的间隔。 Angular 文档有很好的例子:$interval docs

    【讨论】:

    • 啊,是的,宣布取消间隔非常有意义......谢谢!
    • 有必要清除 $interval 吗?我在某处读到永远不会有 2 个间隔同时运行?
    • 在 vanillja js 和 Angular 实现中,您可以拥有任意数量的间隔。示例:jsfiddle.net/57nn8xrz
    • 清除!非常感谢您在这方面的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2020-06-28
    • 2021-12-18
    • 2015-03-08
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多