我有点困惑,我从其他地方读过,超时/间隔是每隔x秒在Javascript中运行一个函数的最佳方法。我必须这样做,以便我的函数每1秒运行一次,因为这是我正在使用的API的规则。
我的代码如下:
$.each(match_details_json.result.players, function(index, v){
if (v.account_id == 38440257){ //finds desired playerid
var match_id_2 = matches[i];
hero = v.hero_id;
playerpos = v.player_slot;
var kills = v.kills;
var deaths = v.deaths;
var assists = v.assists;
var kda = ""+kills+"/"+deaths+"/"+assists+"";
console.log(match_id_2, hero, playerpos, result, gamemode, kda);
callback();
console.log(match_id_2, hero, result, gamemode, kda);
h=h+1;
setTimeout(get_match_details(h), 10000);
i=i+1;
}
else{
console.log('Not desired player, skipping...');
}
});
那里有很多乱码。但重要的部分是setTimeout(get_match_details(h), 10000);
这是否正确,我试图说“在10秒内再次运行此功能”并继续,直到每个方法完成。它不起作用。
如有必要,这是我的get_match_details
功能:
function get_match_details(){
$.ajax({
url: 'php/ApiMatchPull.php',
data: {accountid:'38440257', querytype:'GetMatchDetails', querycondition1:'match_id='+matches[h]},
success: function (data) {
console.log ('Match Details were was pulled successfully');
match_details_json = data;
matchdetailsfill(checkvalidity);
}
});
}
提前谢谢。
答案 0 :(得分:4)
这正是setInterval& clearInterval适用于。
因此,您可以使用类似于:
的代替setTimeoutvar timer = setInterval(function() {
get_match_details(h);
}, 1000); // for every second
当你想要停止它时,请使用:
clearInterval(timer);
答案 1 :(得分:0)
您即时执行函数get_match_details
,将代码更改为
setTimeout( function() {
get_match_details(h)
}, 10000 );
您的代码中发生的事情是您遍历所有玩家,10秒后将同时进行多次Ajax调用(get_match_details
)。
如果你想在每个ajax调用之间间隔10秒,你必须重构你的方法:
var l = [1,2,3,4,5];
var c = l.length;
var ix = -1;
ajax = function( n ) {
alert( 'do some ajax with ' + n )
}
call = function() {
if( c > ++ix ) {
ajax( l[ ix ] );
setTimeout( function() { call(); }, 1000 );
}
}
call();