如何限制函数调用?

时间:2012-11-02 01:15:35

标签: javascript jquery

我目前正在寻找最佳解决方案来限制对函数的请求数量。

示例:

function CheckData() {
    if (d == "newdata") {
        GetData(2);
    }
}

function GetData(getcheck) {
    // Ajax Request here
}

我正在寻找的解决方案是这样的,当CheckData调用GetData时,有一种方法可以限制它调用GetData的频率,或者更好的是,如果有大量突然发出的请求,是否存在让它说只得到最后一个请求的方式? 所以基本上它可以检查请求的频率,以便你可以说它停止了大量请求发送最后一个请求吗?

我只想找到一种方法来限制CheckData调用GetData的频率,但这是最小化等待的最佳方法。

我已经看了几个解决方案,但我不确定如何将它应用于这种情况。

1 个答案:

答案 0 :(得分:3)

选项1
用于限制可以调用函数的时间的常用模式是:

throttledebounce

(您还可以在underscore.js中看到类似的实现)

选项2
虽然对于ajax,您可以创建队列系统,以便在同一个资源上一次限制一个请求。

选项3
或者,如果您的函数始终获得相同的资源,只需检查请求是否结束:

var GetData = (function() {
    var running = false;
    return function(getcheck) {
        // exit if ajax is running
        if ( running ) { return; }

        running = true;

        $.ajax(/* go */)
            .done(function() {
                /* do stuff with data */

                // call it over
                running = false;
            });
    }
}());

function CheckData() {
    if (d == "newdata") {
        GetData(2);
    }
}