Предотвратить повторный ввод JavaScript-таймера - PullRequest
2 голосов
/ 02 апреля 2012

Моя страница ASP.NET MVC использует JavaScript / jQuery для опроса моей базы данных каждую секунду.

Это работает, но я хочу убедиться, что в случае задержки мой обработчик таймера не получитвызывается снова, прежде чем он вернется.

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

ПРИМЕЧАНИЕ: Я понимаю, что каждая секунда кажется частой, но этот код опрашивает мой сервер после отправки платежа по кредитной карте.Обычно он запускается только в течение секунды или около того, и я не хочу, чтобы пользователь ждал дольше, чем необходимо.

Ответы [ 3 ]

5 голосов
/ 02 апреля 2012

Опрашивать каждую секунду?Это довольно тяжело!

Кроме того, у вас не будет этой проблемы, если вместо setInterval используется setTimeout.Последний обеспечивает выполнение части кода x раз с заданным интервалом, тогда как первый гарантирует, что задержка составляет не менее x миллисекунд.

function some_poller() {
    $.ajax({
       url: '/some_page',
       success: function() {
           setTimeout(some_poller, 1000);
       },
       error: function() { // Also retry when the request fails
           setTimeout(some_poller, 1000);
       }
    });
}

// Init somewhere
some_poller();
1 голос
/ 02 апреля 2012

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

Но вы действительно уверены, что вам нужно опрашивать каждую секунду?Это очень болтливый интерфейс.

0 голосов
/ 02 апреля 2012

По моему личному опыту, «глобальная» (внутри корневой функции) переменная работает очень хорошо в этом случае, так что вы можете контролировать, когда очищать и перезапускать. Если ответ действительно так быстр, как вы говорите, это не должно вызывать слишком много накладных расходов (очистка / сброс) и позволит учитывать ситуации такого типа.

...