根据时间更改AngularJS $间隔延迟

时间:2016-10-11 09:41:42

标签: angularjs setinterval

我正在尝试更改间隔的延迟,具体取决于一天中的时间。每30分钟,我想自动(并随机)从预定义列表中推送一个博客帖子,而不会触发此事件的UI事件。然而,在夜晚,我想减慢推动(改变延迟)以不“堵塞”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分钟)继续向上推。我做错了什么?

1 个答案:

答案 0 :(得分:0)

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

例如:

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

$interval.cancel(stop)

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