Как сделать задержку между каждым циклом функции 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
, Это позволит вам запускать код после того, как ваш метод вернулся, и устранит необходимость в любом тайм-ауте и т. Д.
Обратный вызов - это в основном метод, который выполняется в конце вашего кода. Вы в основном говорите свою функцию, вот еще одна функция, которую я хочу, чтобы вы вызвали, когда вы закончите выполнять свою работу.