Ho una funzione request-promise che effettua una richiesta a un'API. Sono rate-limitata da questa API e continuo a ricevere il messaggio di errore:Coda promessa timer/acceleratore
Exceeded 2 calls per second for api client. Reduce request rates to resume uninterrupted service.
sto correndo un paio di Promise.each
loop in parallelo, che causa il problema, se corro solo un'istanza di Promise.each
tutto funziona bene All'interno di queste chiamate Promise.each
portano alla stessa funzione a con una chiamata request-promise. Voglio racchiudere questa funzione con un'altra funzione queue
e impostare l'intervallo su 500
millisecondi in modo che uno request
non venga creato uno dopo l'altro, o parallelo, ma impostato su tale ora, in coda. Il fatto è che ho ancora bisogno di queste promesse per ottenere i loro contenuti anche se ci vuole un tempo piuttosto lungo per ottenere una risposta.
C'è qualcosa che farà questo per me? Qualcosa in cui posso avvolgere una funzione e risponderà a intervalli regolari e non in parallelo o alle funzioni di fuoco una dopo l'altra?
Aggiornamento: Forse ha bisogno di essere promettere specifico, ho cercato di usare la funzione della valvola a farfalla di sottolineatura
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()
E tutto quello che tornato era questo:
$ DEBUG=* node throttle.js
throttle request started +0ms
throttle request started +2ms
throttle request started +0ms
Puoi mostrarci parte del tuo codice reale in modo da avere qualcosa su cui lavorare? – jfriend00
@ jfriend00 La mia implementazione è piuttosto specifica per un'API. Quello che ho è un wrapper per 'request' che usa un sacco di funzioni. Questo è il punto in cui posso frenare. Voglio avvolgere quel wrapper che contiene 'request' con una sorta di funzione di accodamento. – ThomasReggi
Soluzione generica per questo tipo di problemi: [spex] (https://github.com/vitaly-t/spex). –