Функция setTimeout()
не приостанавливает выполнение на указанное время, она ставит в очередь функцию, которая будет выполнена после указанного времени.Строка с кодом после setTimeout()
будет выполнена немедленно.Поэтому, если у вас есть следующий код:
1 someFunction();
2 setTimeout(function(){console.log("From timeout");}, 10000);
3 console.log("After setTimeout()");
То, что произойдет, будет вызвано в строке 1 someFunction()
, тогда в строке 2 анонимная функция будет поставлена в очередь для выполнения через 10 секунд, а затем строка3 будет выполнено, войдя в журнал «После setTimeout ()», и, наконец, через 10 секунд анонимная функция выполнит ведение журнала «От тайм-аута».
Если вы хотите закодировать цикл, в котором каждая итерация разнесена на 10 секундвместо того, чтобы использовать обычный цикл for, вы пишете функцию, которая использует setTimeout()
для вызова себя:
// this for loop won't work
for(var i = 0; i < 20; i++) {
// do something
// pause for 10 seconds ---- can't be done
}
// so instead you do something like this:
function timeoutLoop(i, max) {
if (i < max) {
// do something
i++;
setTimeout(function(){timeoutLoop(i, max);}, 10000);
}
}
timeoutLoop(0, 20);
Я нашел ваш код немного трудным для чтения, поэтому я не пытался интегрировать вышеприведенное сэто, но вот действительно простая демонстрация вышеупомянутой работы: http://jsfiddle.net/CrSEt/1/
Или вот более чистая версия, которая отделяет фактическую обработку от функции цикла с помощью обратного вызова: http://jsfiddle.net/CrSEt/
Я уверен, что если вы немного поиграете с вышеперечисленным, вы увидите, как заставить его работать в вашем коде.Возможно, вы захотите установить последующие таймауты внутри своего обратного вызова ajax success.