Javascript 每五次迭代后暂停循环一秒钟
对于我的程序,我必须发出100个JSON请求。不幸的是,每秒只允许5次呼叫。由于我使用for循环发出所有JSON请求(这是最好的方法),因此我必须在每5次调用后暂停循环1秒Javascript 每五次迭代后暂停循环一秒钟,javascript,loops,timeout,sleep,wait,Javascript,Loops,Timeout,Sleep,Wait,对于我的程序,我必须发出100个JSON请求。不幸的是,每秒只允许5次呼叫。由于我使用for循环发出所有JSON请求(这是最好的方法),因此我必须在每5次调用后暂停循环1秒 function Hello() { $("#randomdiv").show(); for (var i=0; i<100; i++) { if (i%5 == 0 && i>0) { sleep(1000); } $
function Hello() {
$("#randomdiv").show();
for (var i=0; i<100; i++) {
if (i%5 == 0 && i>0) {
sleep(1000);
}
$.getJSON(JSONreq, function(data) {Just a JSON request, nothing special})
};
};
函数Hello(){
$(“#randomdiv”).show();
对于(var i=0;i0){
睡眠(1000);
}
$.getJSON(JSONreq,函数(数据){只是一个JSON请求,没有什么特别的})
};
};
sleep(1000)
导致整个页面冻结约20秒,并防止在JSON请求发出之前出现#randomdiv
我能做些什么来解决这个问题?
非常感谢:)您可以在关闭时使用超时:
function Hello() {
$("#randomdiv").show();
var loop = getLoop();
loop();
};
function getLoop() {
var count = 0;
var func = function() {
for (var i = 0; i < 5; ++i) {
$.getJSON(JSONreq, function(data) {Just a JSON request, nothing special})
}
if (++count < 20) {
setTimeout(func, 1000);
}
}
return func;
}
函数Hello(){
$(“#randomdiv”).show();
var loop=getLoop();
loop();
};
函数getLoop(){
var计数=0;
var func=函数(){
对于(变量i=0;i<5;++i){
$.getJSON(JSONreq,函数(数据){只是一个JSON请求,没有什么特别的})
}
如果(++计数<20){
设置超时(func,1000);
}
}
返回函数;
}
您可以执行以下操作:
function Hello() {
$("#randomdiv").show();
for (var i = 0; i < 100; i++) {
var interval = 0;
if (i % 5 == 0 && i > 0) {
interval = 1000;
}
setTimeout(function () {
getJson()
}, interval);
};
}
function getJson() {
$.getJSON(JSONreq, function (data) {
Just a JSON request, nothing special
});
}
函数Hello(){
$(“#randomdiv”).show();
对于(变量i=0;i<100;i++){
var区间=0;
如果(i%5==0&&i>0){
间隔=1000;
}
setTimeout(函数(){
getJson()
},间隔);
};
}
函数getJson(){
$.getJSON(JSONreq,函数(数据){
只是一个JSON请求,没什么特别的
});
}
使用计时器:@Alfie我不知道如何每五次迭代使用一次计时器。这两个计时器中哪一个更适合我?您可能需要
setInterval()
,因为它会继续循环直到您停止它。如果希望每5次执行一次代码,可以使用一个全局变量整数,每个循环递增1,然后检查它是否=4,如果是,则执行代码并将数字重置为0,否则,只需在数字上加1,然后退出functionAn替代实现:如果您将问题表述为每次迭代需要暂停循环0.2秒,您可能会发现这是一个更容易解决的问题。@user814064哦,伙计,我不敢相信我没有想到这一点。那容易多了!感谢DoesnsetTimeout
是否使函数异步运行?所以如果你运行这个,我认为它首先会非常快地通过for
循环100次,并设置超时,然后一秒钟后它们会同时运行。这是假设以0
的延迟运行setTimeout
没有任何作用,imo可能不是这样。您可能会发现它会立即运行80次getJson()
,然后在一秒钟后运行20次。