2016-10-11 46 views
1

我试图根据一天中的时间更改间隔的延迟。每隔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分钟)不断推高。我究竟做错了什么?

回答

0

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

例如:

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

$interval.cancel(stop) 

另外,当小时是9或23无间隔将在所有使用此代码运行。这是设计吗?您可能想要删除else if块,并在初始化新块之前清除之前的任何间隔。 Angular docs有这样的很好的例子:$interval docs

+0

啊,是的,宣布取消间隔是非常有意义的......谢谢! – RVBuuren

+0

是否有必要清除$间隔?我在某个地方读到,在同一时间永远不会有两个间隔? – RVBuuren

+0

在vanillja js和角度实现中,您可以根据需要创建多个区间。例如:https://jsfiddle.net/57nn8xrz/ –