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

如何在javascript中使我的函数每x秒循环一次,javascript,json,setinterval,Javascript,Json,Setinterval,有人能帮我让函数myFunction每X秒运行一次吗。如果我只运行一次,该函数就可以正常工作,但是当我开始使用setInterval时,它不是每x秒运行一次。在下面的示例中,它有时在5秒后执行,有时在8秒后执行,依此类推。我应该在代码中更改什么?我使用的api每分钟只允许30个请求,我担心这个函数会超过限制,因为有两个getJSON setInterval(function () { myFunction(); }, 10000); function myFunction() {

有人能帮我让函数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();

当前实现的问题是,它使用异步请求,这可能需要10秒以上的时间,但我们无法预测何时提供请求

无论以前的请求是否完成,方法setInterval都将执行myFunction

因此,下一个请求将排队等待执行。所以你会发现它有时在5秒后执行,有时在8秒后执行,依此类推

应该使用setTimeout递归调用该方法,而不是使用setInterval

试试这个:

调用函数; var callCount=1; var中继器=设置间隔功能{ 如果callCount示例setInterval实现,这将每1秒运行一次。您的代码应该每10秒调用一次函数,但在该过程中找不到任何问题

setIntervalmyFunction,1000; 函数myFunction{ console.lognew Date.getSeconds; };
myFunction;setTimeout函数每x秒运行一次。您如何知道它需要5秒、8秒等时间?@jaikl您如何知道您的函数需要多少时间?setTimeout函数只运行一次@Roy@JamesMonger我计算了函数运行的时间。它至少需要10秒,这样就出了问题。不是吗d其背后的原因有时在5秒后执行,有时在8秒后执行,依此类推。
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();