2012-11-25 42 views
0

我需要在我的node.js服務器上運行一個函數,每15分鐘完成一次相同的任務。 我用於那個setInterval,如在這裏的例子編號3 - http://tinyurl.com/c2jj7dl。 於是,我開始是這樣的:JavaScript的setInterval和函數完成

exports.start = function (list, callback){ 
    setInterval(stuffTop.loadstuff, 900000, list, function (parsedList) { 

       // CODE STUFF HERE 


       // THEN THE CALLBACK. 
     callback(parsedDynamicList); 

    }); 

} 

其實這個東西的工作,但功能被完成的第一次 - 只900000MS後。 是否有一個選項可以使功能完整(在第一輪中) - 直接調用?謝謝。

+0

是'stuffTop.loadstuff'同步? – robbrit

+0

這是接受回調的另一個函數,所以如果我理解正確,答案是否定的...... – Daniel

+0

我對'setInterval'的四個參數感到困惑,通常需要兩個參數。 –

回答

3

使用功能,recursivly自稱:

foo = function(){ 
    doStuff() 
    setTimeout(foo,900000) 
} 

在你的情況應該是這樣的:

exports.start = function (list, callback){ 
    var foo = function() { 
    stuffTop.loadstuff(list, function(parsedList) { 
     //CODE STUFF HERE 
     //THEN THE CALLBACK 
     callback(parsedDynamicList); 
     setTimeout(foo,900000); 
    }); 
    } 
    foo(); 
} 
2

你的問題的解決方案是簡單的。在進入setInterval之前調用該函數。就像這樣:

var callback=function(){} 
    var list=['some','list']; 
    var repeaterFunction = function(){console.log("do now!")} 

    var start = function (list, callback){ 
     repeaterFunction(); 
    var repeater = setInterval(repeaterFunction, 5000, list, function(parsedList){ 
        // CODE STUFF HERE 
        // THEN THE CALLBACK. 
      callback(parsedDynamicList); 

     }); 

    } 
    start()​ 

,我使用var repeater = setInterval(...允許,只要你希望clearInterval(repeater)的事實。

這裏的fiddle