可以使用“递归”回调堆叠溢出吗?

时间:2012-03-07 08:24:41

标签: javascript jquery recursion

我写了一个很长时间的轮询助手类,因为$ .getJSON方法我异步它不会递归并且不会溢出吗? (在responseCallback中调用startPolling

递归
MyApp.Polling = function (url, parameters, callback) {
    this.url = url;
    this.parameters = parameters;
    this.callback = callback;
    this.startPolling();
};

MyApp.Polling.prototype = {
    abort: function () {
        if (this.request != null) {
            this.request.abort();
        }
    },
    startPolling: function (xhr) {
        if (xhr != null && xhr.status == 0) return;

        this.request = $.getJSON(this.url, this.parameters, $.proxy(this.responseCallback, this));
        this.request.error($.proxy(this.startPolling, this));
    },
    responseCallback: function (data) {
        this.callback(data);
        this.startPolling();
    }
};

编辑:感谢快速回复的人,我有另一个问题。在firebug中有很多请求,看起来他们仍然在等待响应(小旋转器在请求旁边旋转)但它们应该被提供(正如您在代码中看到的那样,一次只提供一个请求),如果我关闭了整个网络服务器他们没有中止他们继续旋转,它是一个firebug bug还是我的长时间轮询有问题?感谢

2 个答案:

答案 0 :(得分:2)

这是正确的。在成功或错误事件发生之前,您将退出startPolling方法并将控制权返回给浏览器,因此不会从方法中调用回调。

答案 1 :(得分:1)

真 - 假设有效 - 没有递归。