Как сделать задержку между каждым циклом функции jQuery.each?

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

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

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

2 ответа

Решение

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)

Если вы делаете AJAX звонки внутри вашего each цикл, то вы можете запускать запросы ajax синхронно.

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

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

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

Другие вопросы по тегам