Timed Versprechen Warteschlange / Gas
Ich habe ein Anfrage-Versprechen -Funktion, die eine Anforderung an eine API sendet. Ich bin durch diese API auf bestimmte Raten beschränkt und erhalte immer wieder die Fehlermeldung:
Exceeded 2 calls per second for api client. Reduce request rates to resume uninterrupted service.
Ich laufe ein paarPromise.each
Schleifen parallel, was das Problem verursacht, wenn ich nur eine Instanz von @ ausfühPromise.each
alles läuft gut. Innerhalb dieserPromise.each
-Aufrufe führen zu derselben Funktion a mit einem Anfrage-Versprechen Anruf. Ich möchte diese Funktion mit einem anderen @ umschließqueue
Funktion und stellen Sie das Intervall auf500
Millisekunden, so dass einrequest
wird nicht nacheinander oder parallel erstellt, sondern auf diese Zeit in der Warteschlange gesetzt. Die Sache ist, ich brauche immer noch diese Versprechen, um ihre Inhalte zu erhalten, auch wenn es ziemlich lange dauert, bis eine Antwort kommt.
Gibt es irgendetwas, das das für mich tun wird? Etwas, in das ich eine Funktion einbinden kann und das in einem festgelegten Intervall und nicht parallel oder nacheinander abfeuert?
Aktualisieren Vielleicht muss es versprechensspezifisch sein, ich habe versucht, die Gasfunktion des Unterstrichs zu verwenden
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()
Und alles, was ich zurückbekam, war das:
$ DEBUG=* node throttle.js
throttle request started +0ms
throttle request started +2ms
throttle request started +0ms