在较长的持续时间内遇到setInterval问题

时间:2015-10-23 13:17:32

标签: javascript node.js

node.js下的

setInterval似乎不适用于30分钟和更长时间的延迟值。我不知道问题是什么。减少在下面的示例中传递给setInterval的延迟仅为60秒(通过删除一个* 60)使其重复正确。

有人能指出我的代码中的任何错误吗?

我尝试使用https://www.npmjs.com/package/repeat,但我在30和60分钟的时间间隔内遇到了同样的问题。

这是一个代码示例:

function destroy() {
    console.log('Destroy');
    console.log('----------------------------------------------------------------------'); 

};

function post() {

    console.log('Post');
    console.log('----------------------------------------------------------------------'); 

    setTimeout(destroy, 1000 * 60 * 30);
};


setTimeout(destroy, null);
setTimeout(post, 1000);
setInterval(post, 1000 * 60 * 60); 

1 个答案:

答案 0 :(得分:1)

这是一段长间隔的代码。它使用60秒的超时来检查长间隔。这应该代替setInterval。您可以创建一个显示longInterval.items及其上次运行时间的页面。

function longInterval(fn, ms) {
  var id = longInterval.counter++;
  var now = new Date().getTime();
  var item = {ms: ms, fn: fn, last: now};
  longInterval.items[id] = item;
  return id;
}

longInterval.items = {};
longInterval.counter = 0;

longInterval.run = function() {
  var items = longInterval.items;
  var now = new Date().getTime();
  for (var k in items) {
    var item = items[k];
    if (now - item.last >= item.ms) {
      item.last = now;
      item.fn();
    }
  }

  longInterval.timeout = setTimeout(function(){
    longInterval.run();
  }, 1000 * 60);
};

longInterval.clear = function(id) {
  if (longInterval.items[id]) {
    delete longInterval.items[id]
  }
};
longInterval.run();

用法:

var myInterval = longInterval(function() {
  console.log(new Date().getTime());
}, 1000 * 60);