有人可以帮助我,使myFunction
函数每隔X
秒运行一次。如果我只运行一次,该功能可以正常工作,但是当我开始使用setInterval时,它不会每隔x秒运行一次。在下面的例子中,它有时在5秒后执行,有时在8秒后执行,依此类推。我的代码应该改变什么? api我每分钟只使用30次请求,我担心这个函数会超过限制,因为有两个getJSON。
setInterval(function () {
myFunction();
}, 10000);
function myFunction() {
$.getJSON("URL", function (data) {
console.log(data);
$.getJSON("URL", function (data2) {
console.log(data2);
variable1 = data.Departure;
variable2 = data2.Departure;
text = "";
variable3 = variable1.concat(variable2);
variable3.sort(function (a, b) {
return new Date('2017/01/16 ' + a.time) - new Date('2017/01/16 ' + b.time);
})
console.log(variable3);
for (var i = 0; i < variable3.length; i++) {
text += variable3[i].name.substring(13, 19) + " departure " + variable3[i].time.substring(0, 5) + " from " + variable3[i].stop.substring(8) + "<br>";
}
document.getElementById("Textn").innerHTML = text;
console.log(text);
});
});
}
myFunction();
答案 0 :(得分:0)
当前实现的问题在于它使用的异步请求可能需要10秒以上(无法预测何时提供请求)。
方法setInterval
将执行myFunction
,无论先前的请求是否已完成。
结果,下一个请求将排队等待执行。所以你得到它有时会在5秒后执行,有时会在8秒之后执行。依此类推。
您应该使用setTimeout()
递归调用该方法,而不是使用setInterval
function myFunction() {
$.getJSON("URL", function (data) {
$.getJSON("URL", function (data2) {
//Your existing code
//Schedule it be executed after x * 1000 milliseconds
setTimeout(myFunction, 10000);
});
});
}
myFunction();
答案 1 :(得分:0)
试试这个:
callfunction();
var callCount = 1;
var repeater = setInterval(function () {
if (callCount <= 30) {
callfunction();
callCount += 1;
} else {
clearInterval(repeater);
}
}, 1000);
function callfunction()
{
console.log((new Date()).getSeconds());
}
答案 2 :(得分:0)
示例 setInterval 实现,这将每1秒运行一次。 您的代码应该每隔10秒调用一次该函数,无法找到任何问题。
setInterval(myFunction, 1000);
function myFunction(){
console.log((new Date()).getSeconds());
};
myFunction();
&#13;