У меня есть функция request-promise, которая делает запрос к API. Я ограничен скоростью этого API, и я продолжаю получать сообщение об ошибке:
Exceeded 2 calls per second for api client. Reduce request rates to resume uninterrupted service.
Я запускаю пару Promise.each
параллельные циклы, которые вызывают проблему, если я запускаю только один экземпляр Promise.each
все работает нормально. Внутри этих вызовов Promise.each
они приводят к та же функция a с вызовом request-promise. Я хочу обернуть эту функцию другой функцией queue
и установить интервал 500
миллисекунд, чтобы request
не выполнялись друг за другом или параллельно, а устанавливались на это время в очереди. Дело в том, что мне все еще нужны эти обещания, чтобы получить их содержимое, даже если для получения ответа требуется довольно много времени.
Есть ли что-нибудь, что сделает это для меня? Что-то, во что я могу обернуть функцию, и она будет реагировать с заданным интервалом, а не параллельно или запускать функции одну за другой?
Обновление: Возможно, это должно быть конкретное обещание, я пытался использовать функцию подчеркивания подчеркивания.
var debug = require("debug")("throttle")
var _ = require("underscore")
var request = require("request-promise")
function requestSite(){
debug("request started")
function throttleRequest(){
return request({
"url": "https://www.google.com"
}).then(function(response){
debug("request finished")
})
}
return _.throttle(throttleRequest, 100)
}
requestSite()
requestSite()
requestSite()
И все, что я получил в ответ, было это:
$ DEBUG=* node throttle.js
throttle request started +0ms
throttle request started +2ms
throttle request started +0ms
request
, которую использует целая куча функций. Это тот момент, когда я могу затормозить. Я хочу обернуть эту оболочку, содержащуюrequest
, какой-то функцией очередей. - person ThomasReggi   schedule 19.12.2014