Created
April 28, 2019 11:35
-
-
Save kosich/d351a5b0c4be0e9dfe6c3a37ab050929 to your computer and use it in GitHub Desktop.
Exponential backoff example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const {rxObserver} = require('api/v0.3'); | |
const { timer } = require('rxjs'); | |
const { map, tap, retryWhen, delayWhen } = require('rxjs/operators'); | |
const source$ = | |
timer(0, 100).pipe( | |
map(val => { | |
if (val == 1) { | |
throw 'Err'; | |
} | |
return val; | |
}) | |
); | |
const sourceObserver = rxObserver('source$: value at 0ms, error at 100ms'); | |
const errorsObserver = rxObserver('Errors at'); | |
const retriesObserver = rxObserver('Retries at'); | |
const resultObserver = rxObserver('result$'); | |
const result$ = source$.pipe( | |
retryWhen(errors => | |
// here Errors are just events | |
errors.pipe( | |
// show error messages thread | |
map(()=>Date.now()), | |
tap(errorsObserver), | |
// will restart with increasing delay | |
delayWhen((_, index) => timer(index * index * 10)), | |
map(()=>Date.now()), | |
tap(retriesObserver) | |
) | |
) | |
); | |
source$.subscribe(sourceObserver); | |
result$.subscribe(resultObserver); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment