Javascript:10秒后调用函数,然后每1分钟调用一次

我有以下情况:

我有一个javascript ajax函数loadCars() ,需要在页面加载10秒后调用,然后每隔60秒调用一次。

以下是我到目前为止所尝试的内容:

 setTimeout(function(){setInterval(function(){loadCars()}, 60000)}, 10000); 

发生的事情是,该function在10秒后被调用,但再也没有,我错过了什么?

您需要在setTimeoutsetInterval上调用loadCars

 setTimeout(function() { console.log('first 10 secs'); // loadCars(); setInterval(function() { console.log('60 secs has passed'); // loadCars(); }, 60000); }, 10000); console.log('page loaded'); 

我不同意给出的答案,因为他们使用setInterval或者不等待ajax调用完成。 IMO你应该只在函数loadcars(和ajax调用)完成时设置一个新的超时。

例:

 function loadCars () { // ajax call happens here $.ajax() .then(function(){ // call the function here setTimeout(function(){ loadCars(); // wait a minute after you recieved the data }, 60000) }) } // wait 10 seconds setTimeout(function(){ loadCars(); }, 10000) 

这样做的好处是,它只会在HTTP请求完成时开始设置新的超时,并防止该function失去同步。 如果你将setinterval与ajax调用结合使用,那么下一个ajax调用将在60秒内发生,即使当前的一个延迟10秒(并且你不想这样)。

您可以在loadCars()方法中调用setTimeout(loadCars, 60000) ,这样您最初使用setTimeout 10秒调用它一次,然后从该点开始每次执行时将超时设置为1分钟…

 function loadCars() { //code setTimeout(loadCars, 60000); } setTimeout(loadCars, 10000); 

如果你想在ajax调用完成后再调度下一个超时,那么要么进行同步ajax调用,要么将setTimeout()放入你的ajax调用的success回调中……后者是更好的选择。

为了更好地控制时序和函数调用,您可以通过以下方式指定它们:

 function loadCars() { $('#log').append('Cars loaded
'); }; function loadManufacturers() { $('#log').append('Manufacturers loaded
'); }; function loadCustomers() { $('#log').append('Customers loaded
'); }; function loadContent(delays, functions) { if (functions.length) { setTimeout(function () { functions.pop()(); loadContent(delays, functions); }, delays.pop()); }; }; loadContent([3000, 2000, 1000], [loadCars, loadManufacturers, loadCustomers]);