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);
答案 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);