如何在jQuery.each函数的每个循环之间设置延迟?

9
我有这样的代码:

我有这样的代码:

$('li').each(function(){
   var data = $(this).text();
   requestFunction(data, function(status){
       if ( status == 'OK' ) do stuff...
   });
});

所以,我需要在使用函数“requestFunction()”之间进行一些延迟。我该如何做呢?希望这样理解起来更容易,谢谢。


是的,它是谷歌地图地理编码器。 - Ax.
2个回答

26

将setTimeout的延迟时间增加:

$('li').each(function(indexInArray){
   var data = $(this).text();
   setTimeout( function () {
       requestFunction(data, function(status){
           if ( status == 'OK' ) do stuff...
       });
   }, indexInArray * 500);
});
如果您循环遍历这些元素,我们希望增加超时时间,否则所有请求将在同一时间触发,而不是延迟后的500毫秒后。
  • 时间开始:0毫秒
  • 第一个请求:0毫秒(500 * 0)
  • 第二个请求:500毫秒(500 * 1)
  • 第三个请求:1000毫秒(500 * 2)

这是什么数组?我的意思是“indexInArray”。 - Ax.
哦,朋友,你忘记写“each(function (indexInArray) {”这部分代码了。我知道jQ.each函数中的索引。所以,现在我理解你的意思了。谢谢。我会试一下的。 - Ax.
@Ax,是的,我打错了。让我知道它进展如何。 - Joe
谢谢,伙计!它运行得很好 :D 现在 Google 地理编码器不会返回状态 == "OVER_QUERY_LIMIT" 了 :D 哈哈,非常感谢 :) 但我会稍微延迟一下以获得更好的结果 id * 800 - Ax.

2
如果您在each循环内发起ajax调用,则可能希望同步运行ajax请求。
要做到这一点,您可以将ajax请求的async属性设置为false
或者您可能希望考虑为requestFunction实现一个回调函数。这将允许您在方法返回后运行代码,并消除任何超时等待。
回调函数基本上是在代码末尾执行的方法。您只需告诉您的函数,在完成工作后,还有另一个我希望您调用的函数。

我无法尝试读取“requestFunction”的源代码。我只能在调用之间进行一些延迟。 - Ax.
是的。 :) 但我只想以一种漂亮的方式做到这一点。如果能够在jQ.each函数中循环之间进行延迟,那就太理想了。 - Ax.
你为什么想这样做呢?请解释一下原因。如果你能解释清楚,我们或许可以更容易地帮助你。 - Jamie Dixon
回调函数基本上是在代码结束时执行的方法。你基本上告诉你的函数,当你完成工作时,这里有另一个函数我想让你调用。 - Ax.
不理解,抱歉。- 这是你的第一条评论。我无法读懂你的想法,Ax。 - Jamie Dixon
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接