JavaScript setInterval和函数完成时

时间:2012-11-25 20:17:18

标签: javascript node.js callback setinterval

我需要在我的node.js服务器上运行一个函数,它每15分钟完成一次相同的任务。 我用于setInterval,如例3中的示例 - http://tinyurl.com/c2jj7dl。 所以,我得到了这样的东西:

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

                // CODE STUFF HERE


                // THEN THE CALLBACK.
        callback(parsedDynamicList);

    });

}

实际上这个东西有效,但功能第一次完成 - 仅在900000MS之后。 是否可以选择使功能完整(在第一轮) - 直接调用?感谢。

2 个答案:

答案 0 :(得分:3)

使用递归调用自身的函数:

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();
}

答案 1 :(得分: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