Как исправить количество запросов API в секунду (задержка запроса) - PullRequest
0 голосов
/ 01 апреля 2020

Я использую открытый API, который имеет квоту для максимального числа запросов в секунду (1 / se c).

Итак, я хочу иметь плавающую задержку перед выполнением следующего запроса , Я мог бы сделать фиксированный, но тогда это заняло бы больше времени для обработки (потому что после запроса он сохраняет данные в БД, что занимает х времени).

Я пытался написать что-то вроде этого :

'use strict'

const request = require('request-promise')

var last_request_time = 0

const makeRequest = (param1, param2, callback) => {
  let current_request_time = Date.now()

  setTimeout(() => {
    last_request_time = current_request_time // doesn't change "last_request_time"
    
    request({
      uri: encodeURI(`/url/${param1}/${param2}`),
      json: true
    }).then(data => {
      return callback('ok', data)
    }).catch(error => {
      return callback('error', error)
    })
  }, 1000 - (current_request_time - last_request_time))
}

module.exports = makeRequest

Но это не сработает без изменения last_request_time непосредственно перед запросом API. Как заставить это работать?

1 Ответ

0 голосов
/ 01 апреля 2020

Попробуйте это:

var last_request_time = 0;
const makeRequest = (param1, param2, callback) => {
 let current_request_time = Date.now();

 setTimeout(() => {
  // doesn't change "last_request_time"

   request({
   uri: encodeURI(`/url/${param1}/${param2}`),
   json: true
  }).then(data => {
    return callback('ok', data);
  }).catch(error => {
    return callback('error', error);
   });
 }, 1000 - (current_request_time - last_request_time));
 last_request_time = current_request_time;
};

Если оно есть внутри функции тайм-аута, оно не изменит значение внешней стороны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...