2016-10-11 79 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/ –