Tabula_Rasa
Mitglied
Hallo zusammen,
ich versuche seit einiger Zeit Daten von einer API geliefert zu bekommen, die maximal 50 Anfragen/Minute erlaubt.
Ich muss mit einer Request-Chain arbeiten, auch wenn man es vermeiden sollte.
Der GET-Request:
Irgendwie funktioniert es nicht so wie ich es mir vorstelle.
Also wenn 50 Anfragen erreicht wurde, warte ich die restliche Zeit ab und fahre danach wie gehabt fort - so zumindest mein Gedanke.
Aber das mit dem Warten klappt nicht ganz, da ich am Ende dennoch zu viele Anfragen schicke.
ich versuche seit einiger Zeit Daten von einer API geliefert zu bekommen, die maximal 50 Anfragen/Minute erlaubt.
Ich muss mit einer Request-Chain arbeiten, auch wenn man es vermeiden sollte.
Code:
Promise.all(
orders.map(order => this.api.getURL(order.resource_url).catch(() => null))
).then(responses => {
const successfulResponses = responses.filter(response => response != null)
for(let data of successfulResponses) {
// hier folgt eine Request-Chain mithilfe von data
}
});
Der GET-Request:
Code:
constructor(private http: HttpClient) {
setInterval(()=>{
this.time--;
if (this.time === 0){
this.time = 60;
this.maxReq = 50;
}
}, 1000);
}
sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
getURL(url: string){
this.maxReq -= 1;
if(this.maxReq <= 0){
let restZeit = 60 - this.time;
await this.sleep(restZeit*1000);
return this.http.get(url, this.httpOptions).toPromise();
} else {
return this.http.get(url, this.httpOptions).toPromise();
}
}
Irgendwie funktioniert es nicht so wie ich es mir vorstelle.
Also wenn 50 Anfragen erreicht wurde, warte ich die restliche Zeit ab und fahre danach wie gehabt fort - so zumindest mein Gedanke.
Aber das mit dem Warten klappt nicht ganz, da ich am Ende dennoch zu viele Anfragen schicke.
Zuletzt bearbeitet: