【问题标题】:How to make delay between each loops of jQuery.each function?如何在 jQuery.each 函数的每个循环之间进行延迟?
【发布时间】:2011-11-18 17:51:47
【问题描述】:

我有类似这样的代码:

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

所以,我需要在使用函数“requestFunction()”之间做一些延迟。我怎么能这样做?希望可以理解,谢谢。

【问题讨论】:

  • 是的,它是谷歌地图地理编码器

标签: javascript jquery delay each


【解决方案1】:

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 ms (500 * 0)
  • 第二个请求:500 ms (500 * 1)
  • 第三次请求:1000 ms (500 * 2)

【讨论】:

  • 它会是什么数组?我的意思是“indexInArray”。
  • 哦,伙计,你只是忘了写“each(function(indexInArray){”这部分代码。我知道jQ.each函数中的index'es。所以,现在我理解你了。谢谢。会试试看。
  • @Ax,是的,我打错了。告诉我进展如何
  • 谢谢你!它运行良好 :D 现在谷歌地理编码器不会导致状态 == "OVER_QUERY_LIMIT" :D 哈哈,非常感谢 :) 但我会延迟一点以获得好的结果 id * 800
【解决方案2】:

如果您在 each 循环中进行 ajax 调用,那么您可能希望同步运行 ajax 请求。

为此,您可以将 ajax 请求的 async 属性设置为 false

或者,您可能希望考虑为requestFunction 实现回调。这将允许您在方法返回后运行代码,并且不需要任何超时等。

回调基本上是在代码末尾执行的方法。你基本上告诉你的函数,这是我希望你在完成工作后调用的另一个函数。

【讨论】:

  • 我无法尝试读取“requestFunction”的来源。我只是可以在它调用之间做一些延迟。
  • 为什么通话之间需要延迟?请解释
  • 是的。 :) 但我只是想做一些漂亮的方式。如果它能够在 jQ.each 函数中的循环之间进行延迟,那将是理想的。
  • 你为什么要做这个想法?请解释原因。如果您解释原因,我们或许可以更轻松地为您提供帮助。
  • “回调基本上是一种在代码末尾执行的方法。你基本上告诉你的函数,这是我希望你在完成工作后调用的另一个函数。”伙计,这很愚蠢:)我知道什么是回调函数:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多