Javascript:10秒后调用函数,然后每1分钟调用一次
我有以下情况:
我有一个javascript ajax函数loadCars()
,需要在页面加载10秒后调用,然后每隔60秒调用一次。
以下是我到目前为止所尝试的内容:
setTimeout(function(){setInterval(function(){loadCars()}, 60000)}, 10000);
发生的事情是,该function在10秒后被调用,但再也没有,我错过了什么?
您需要在setTimeout
和setInterval
上调用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]);