Таймер JavaScript для API с ограниченной скоростью - PullRequest
0 голосов
/ 02 сентября 2018

Я использую API - «Я был pwned?» которая ограничена скоростью - «ограничена одним на каждые 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 голосов
/ 03 сентября 2018

Я бы создал очередь с запросами и обрабатывал бы их один за другим.

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

Возможно, вы захотите добавить обратный вызов, когда очередь опустошена или что-то в зависимости от вашего конкретного случая использования

...