2011-09-16 16 views
9

tengo este código como:¿Cómo hacer un retraso entre cada bucle de la función jQuery.each?

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

Por lo tanto, tengo que hacer un cierto retraso entre el uso de la función "requestFunction()". ¿Cómo podría hacer esto? Espero que sea comprensible, gracias.

+2

¿Estás haciendo llamadas ajax? –

+0

Sí, era Google Maps Geocoder –

Respuesta

26

setTimeout en un momento aumento:

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

si bucle sobre estos elementos, que desea aumentar el tiempo de espera o de lo contrario toda la solicitud dispararía al mismo tiempo si no se retrasó, pero sólo después de nuestro tiempo de espera de 500 ms.

  • Hora de inicio: 0 ms
  • Primera Solicitud: 0 ms (500 * 0)
  • Segunda Solicitud: 500 ms (500 * 1)
  • tercera solicitud: 1000 ms (500 * 2)
+0

¿Qué matriz sería? Me refiero a "indexInArray". –

+0

Oh, amigo, te olvidas de escribir "cada uno (función (* indexInArray *) {" esta parte del código. Conozco los índices en la función jQ.each. Así que, ahora te entiendo bien. Gracias. Lo intentaré. –

+0

@Ax, sí, lo había escrito mal. Déjame saber cómo va – Joe

2

Si está haciendo llamadas ajax dentro de su each loop, entonces es posible que desee ejecutar las solicitudes ajax sincrónicamente.

Para hacer esto, puede establecer la propiedad async de la solicitud de ajax en false.

Como alternativa, es posible que desee considerar la posibilidad de realizar una devolución de llamada para requestFunction. Esto le permitirá ejecutar código después de que su método haya retornado y negará la necesidad de tiempo de espera, etc.

Una devolución de llamada es básicamente un método que se ejecuta al final de su código. Básicamente le dice a su función, aquí hay otra función a la que quiero que llame cuando termine de hacer su trabajo.

+0

No entiendo, sory. –

+0

No puedo intentar leer una fuente de "requestFunction". Solo puedo retrasar algo entre llamadas. –

+0

¿Por qué necesita un retraso entre llamadas? Por favor explique –

Cuestiones relacionadas