Как сделать задержку между каждым циклом функции jQuery.each? - PullRequest
9 голосов
/ 16 сентября 2011

У меня есть такой код:

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

Итак, мне нужно сделать некоторую задержку между использованием функции "requestFunction ()". Как я мог это сделать? Надеюсь, это понятно, спасибо.

Ответы [ 2 ]

26 голосов
/ 16 сентября 2011

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)
2 голосов
/ 16 сентября 2011

Если вы выполняете ajax-вызовы в цикле each, возможно, вы захотите выполнить ajax-запросы синхронно.

Для этого вы можете установить для свойства async запроса ajax значение false.

В качестве альтернативы вы можете рассмотреть возможность обратного вызова для requestFunction. Это позволит вам запускать код после того, как ваш метод вернется, и устранит необходимость в любом тайм-ауте и т. Д.

Обратный вызов - это, по сути, метод, который выполняется в конце вашего кода. Вы в основном говорите свою функцию, вот еще одна функция, которую я хочу, чтобы вы вызвали, когда вы закончите выполнять свою работу.

...