Установка 10-секундной паузы в отправке xmlHttpRequest - PullRequest
2 голосов
/ 26 декабря 2011

Этот код javascript довольно длинный, но наиболее важной частью является конец, в котором он публикует сообщения:

 httpwp['send'](paramswp);

Я безуспешно пытался поставить 10-секундную паузу между каждой отправкой.Обычно он отправляет их все мгновенно.

полный код http://pastebin.com/cEM7zksn

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Функция 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.

1 голос
/ 26 декабря 2011

Чтобы задержать 10 секунд до вызова, вы можете использовать setTimeout

setTimeout(function() { httpwp['send'](paramswp); }, 10000);

Или проще:

setTimeout(function() { httpwp.send(paramswp); }, 10000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...