限速API的Javascript计时器

时间:2018-09-02 20:49:42

标签: javascript jquery api setinterval ratelimit

我正在使用API​​-'我被伪造了吗?'受速率限制-“每1500毫秒限制一次”。我在这里查看了很多其他问题,这些问题通过google和其他一些论坛站点进行了研究,并试图自己找到解决方案。

执行Javascript函数

setInterval()

真的要解决此类问题吗?有没有人找到有效的解决方案?我有点不知所措,

var url = "https://haveibeenpwned.com/api/v2/breachedaccount/";
var breach = Array();
setInterval($.ajax({
           url: url,
           type: 'GET',
           dataType: 'JSON',
           success: function(data) {
                                       breach[] = data;
                    }), 15000);

似乎不起作用,尤其是在我当前的项目正在存储多个电子邮件地址的信息的地方。因此,例如,如果我将4个电子邮件地址存储在一个数组中,并且想循环浏览,但是要等待1500毫秒,然后再次点击API来查询下一个电子邮件地址。

有任何想法吗?还是有一个NodeJS解决方案可以像我最近所学到的那样起作用。

提前谢谢

1 个答案:

答案 0 :(得分:0)

我将创建一个包含请求的队列,并逐个处理它们。

function myRequestQueue()
{
    this.queue = [];
    this.timer = null;
    this.add = function(params)
    {
       this.queue.push(params);
    }

    this.processQueue = function()
    {
         if (this.queue.length > 0)
         {
              $.ajax(this.queue.shift());   
         }

    }
    this.timer = setInterval(this.proceesQueue,1500)

}

用法:

 var myQ = new myRequestQueue(), breach = [];

 for(var i=0;i<100;i++){

     myQ.add({
       url: url,
       dataType: 'JSON',
       success: function(data) { breach.push(data) }});
 } // 100 requests

 // expect them to be processed one by one every 1500 ms

清空队列后,您可能想添加回调,具体取决于您的实际用例