begrenzen Ich habe eine API-Grenze von 10 Anrufe pro Sekunde (jedoch Tausende pro Tag), jedoch, wenn ich diese Funktion ausführen (Jede Style ID des Objekts aufgerufen,> 10 pro Sekunde):Wie API-Aufrufe pro Sekunde mit angular2
getStyleByID(styleID: number): void {
this._EdmundsAPIService.getStyleByID(styleID).subscribe(
style => {this.style.push(style); },
error => this.errorMessage = <any>error);
}
aus dieser Funktion (nur 1 Aufruf verwendet onInit):
getStylesWithoutYear(): void {
this._EdmundsAPIService.getStylesWithoutYear(this.makeNiceName, this.modelNiceName, this.modelCategory)
.subscribe(
styles => { this.styles = styles;
this.styles.years.forEach(year =>
year.styles.forEach(style =>
this.getStyleByID(style.id)));
console.log(this.styles); },
error => this.errorMessage = <any>error);
}
Es macht> 10 Anrufe pro Sekunde. Wie kann ich diese Anrufe drosseln oder verlangsamen, um einen 403 Fehler zu vermeiden?
Dieser Ansatz löst das Problem von @ Miguel nicht, es sei denn, die Anfragen kommen schneller als sie gesendet werden können. konsequent.Führen Sie zum Beispiel Ihren JSBin-Code aus, warten Sie 5 Sekunden und führen Sie ihn dann in der JSBin-Konsole aus: 'for (let i = 0; i <20; i ++) {getStyleByID (i);}'. Sie werden alle gleichzeitig feuern und nicht richtig drosseln, da die ungenutzten Intervalle im Zip gespeichert werden, der darauf wartet, verwendet zu werden, anstatt verworfen zu werden, wenn sie nicht sofort verwendet werden. – Adam
Guter Fang, Adam! Nur Miguel kann sagen, ob mein Vorschlag in seinem Fall funktionieren würde oder nicht. Wenn nicht, wie würdest du es kugelsicher machen? – AngularChef
[Hier ist der JSBin meiner Lösung.] (Http://jsbin.com/lesatebiwo/1/edit?js,console) Der einzige Nachteil ist, dass jede Anfrage immer um 100m verzögert wird, einschließlich der ersten. Fühlen Sie sich frei, Ihren Beitrag mit dieser Lösung zu bearbeiten, wenn Sie denken, dass es eine Verbesserung ist. Ich fand die Lösung [hier] (http://www.g9labs.com/2016/03/21/lossless-rate-limiting-with-rxjs/) – Adam