Непрерывный опрос с помощью javascript — будет ли этот способ работать

#javascript #ajax #http

#javascript #ajax #http

Вопрос:

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

У меня есть эта функция javascript.

         function getMessage() {
                var request = new XMLHttpRequest();
                request.open("GET", "@routes.Application.receive()");
                request.onreadystatechange = function () {
                        if (request.readyState === XMLHttpRequest.DONE amp;amp;
                            request.status === 200) {
                                displayMessage(request.responseText);
                                getMessage()
                        }
                };
  
  1. Будет ли эта система работать или в конечном итоге она будет генерировать какую-то ошибку переполнения стека, потому что для каждого сообщения он выполняет рекурсивный вызов. Есть предложения по улучшению этого? Есть ли лучший идиоматический способ сделать это?
  2. Как я могу установить тайм-аут? Каков тайм-аут по умолчанию? И как я могу определить, когда наступил тайм-аут?

Большое спасибо

PS Я создал эту функцию на основе того, что я прочитал на SO. Была функция, которая, казалось, обрабатывала такие вещи, как тайм-ауты, но она использовала jQuery. Я не знаком с этим, и мне было интересно, можно ли то же самое сделать в чистом JS.

Комментарии:

1. 1. Почему бы просто не попробовать и не посмотреть 2. window.setTimeout

2. Нет, стекового потока не будет, если вы не используете синхронный запрос.

3. зачем использовать короткий опрос, когда доступно так много лучших вариантов?

Ответ №1:

Это должно быть нормально, но лучше заменить getMessage() на setTimeout(getMessage, 500) , чтобы избежать переполнения сервера.