javascript / expert
Snippet
Resiliente asynchrone Streams mit exponentiellem Backoff
Beim Umgang mit instabilen Netzwerkanfragen reicht ein einfacher Retry oft nicht aus. Exponentieller Backoff reduziert die Serverbelastung, indem die Verzögerung zwischen den Versuchen mathematisch erhöht wird, was einen stabileren Wiederherstellungsmechanismus gewährleistet.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
import { timer, retry } from 'rxjs';this.http.get('/api/data').pipe(retry({count: 3,delay: (error, retryCount) => {const backoffTime = Math.pow(2, retryCount) * 1000;console.warn(`Retry #${retryCount} in ${backoffTime}ms`);return timer(backoffTime);}})).subscribe();
angular
Erklärung
1
delay: (error, retryCount) => ...
Eine dynamische Verzögerungsfunktion, die den Fehler und den aktuellen Versuchsindex erhält.
2
Math.pow(2, retryCount) * 1000
Berechnet die Wartezeit exponentiell (1s, 2s, 4s usw.), um Probleme durch Überlastung zu vermeiden.