我正在尝试更改间隔的延迟,具体取决于一天中的时间。每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分钟)继续向上推。我做错了什么?
答案 0 :(得分:0)
首先,你错过了取消间隔的部分内容。为了取消间隔,您应该将其声明为变量并将其用作$interval.cancel()
的参数。
例如:
var stop = $interval(function() {
console.log('running')
}, 100);
$interval.cancel(stop)
当小时数为9或23时,使用此代码根本不会运行间隔。这是设计的吗?您可能希望删除else if
块,并在初始化新块之前清除任何先前的间隔。 Angular文档有很好的例子:$interval docs