如何限制函数的调用?

3

我正在寻找限制函数请求次数的最佳解决方案。

例如:

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

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

我需要的解决方案是当 CheckData 调用 GetData 时,有没有办法限制它调用 GetData 的频率?或者更好的办法是,如果突然出现了一大批请求,是否可以让它只获取最后一个请求?
基本上,它能否检查请求数量的频率,以便您可以说停止了一大批请求,现在只发送最后一个请求?
我只是想找到一种方法限制 CheckData 调用 GetData 的频率,同时尽可能地减少等待时间。
我已经看了几种解决方案,但不确定如何将其应用于此情况。
1个回答

4

选项 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);
    }
}

嗯,我不确定什么是最好的选择:S..基本上是限制请求以获取新的呼喊。我希望它每秒钟检查一次,但如果有一堆请求在1次中进行,则不会爆发请求。这行JavaScript代码给我错误? // 如果ajax正在运行,请退出 运行 && 返回; 未捕获的SyntaxError:意外的标识符 - oOo--STAR--oOo
1
很难在不了解你的应用使用情况的情况下告诉你最佳选择。选项一将限制每秒钟对函数的调用次数,或将限制为每个“调用批次”一次函数调用。在此处阅读有关这些内容的文档:http://underscorejs.org/#throttle。**选项二**基本上会缓存服务器响应,这似乎不是你所需要的。而**选项三**只允许同时进行一个服务器调用。 - Simon Boudrias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接