2014-03-03 32 views
1

我想的API調用被在1秒起來incrementations立即進行,則1秒後,然後2秒等,以10的setInterval具有可變間隔

我嘗試是這樣的:

Meteor.startup -> 
    counter = 1000 
    Meteor.setInterval (-> 
    Meteor.call "call_url", url, (err, result) -> 
     ... 

    if counter < 10000 
     counter += 1000 
     console.log counter 
), counter 

雖然我的計數器增加了,但記錄每秒完成一次,這意味着setInterval不會跟蹤該值。

我看到來處理,這將是具有9 的setTimeout調用API在不同的時間,然後Meteor.setInterval所有超時後開始......只有這樣,聽起來非常難看。

有關如何以乾淨的方式做到這一點的任何建議?用戶在連接到頁面時看到頻繁的更新很重要,但如果他決定讓它打開一段時間,則不需要經常執行該api查詢。

回答

2

更通用的解決方案(CoinsManager未來可擴展)是使用支持將來安排事件的排隊程序包。我看了一堆background task management for Meteor,和queue支持調度。

+1

嗨丹,這看起來是個好主意,但更適合服務器調用。在這裏,api調用都是在客戶端完成的(https://github.com/Fandekasp/CoinsManager/blob/feature/coins_value/app/client/helpers/autorun.coffee)(取決於每個客戶端的可見地址,不在數據庫中保存任何東西)。 dbarrett建議我採取這種方式:http://paste.ubuntu.com/7025613/,也許通過檢查窗口焦點使它變得更加智能 – Fandekasp

0

不太清楚你在問什麼,可能有很多方法來產生你想要的時間間隔。

在javascript中它可能是這樣的:

var doStuff = function(){...}; 
var intervals = [ 1000, 3000, 6000, 10000, 15000, 21000, 28000, 36000, 45000, 55000 ]; 

doStuff(); //run immediately 
intervals.forEach(function(interval){ 
    Meteor.setTimeout(doStuff, interval); 
});