如何在javascript中每隔x秒使我的函数循环

时间:2017-01-18 13:00:46

标签: javascript json setinterval

有人可以帮助我,使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();

3 个答案:

答案 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秒调用一次该函数,无法找到任何问题。

&#13;
&#13;
setInterval(myFunction, 1000); 

function myFunction(){
 console.log((new Date()).getSeconds());
};

myFunction();
&#13;
&#13;
&#13;