Javascript poller不会立即启动

时间:2017-05-04 13:03:34

标签: javascript polling

在我的javascript中我定义了一个轮询器,以便每秒刷新一些内容。定义如下:

var poller = {
    // number of failed requests
    failed: 0,

    // starting interval - 1 seconds
    interval: 1000,

    // kicks off the setTimeout
    init: function() {
        setTimeout(
            $.proxy(this.getData, this), // ensures 'this' is the poller obj inside getData, not the window object
            this.interval
        );
    },

    // get AJAX data + respond to it
    getData: function() {
        var self = this;

        $.ajax({
            url: "api/view",
            success: function(response) {

                   // ....do something....

                    // recurse on success
                    self.init();
                }
            },

            error: $.proxy(self.errorHandler, self)
        });
    },

    // handle errors
    errorHandler: function() {
        if (++this.failed < 10) {

            this.interval += 1000;

            // recurse
            this.init();
        }
      }
    };

    poller.init();
});

问题是加载页面时它不会立即启动。有谁知道原因?非常感谢提前!

1 个答案:

答案 0 :(得分:1)

这是因为第一次$.ajax电话的响应时间。在localhost(开发环境)中呼叫服务时,呼叫有时可能需要超过40秒。

此外,请查看是否有任何其他元素(例如您在特定页面中使用的Highcharts)导致加载页面时出现任何延迟。

您可以在网络下的浏览器开发者控制台中检查此行为。以下是我的$.ajax个来电之一(我使用谷歌浏览器)的响应时间示例:

enter image description here

我还怀疑,当你将其转移到生产环境时,你的响应时间会低得多,但是你必须考虑到服务器上1000毫秒可能过于激进。