Skip to content

Instantly share code, notes, and snippets.

@kosich
Created April 28, 2019 11:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kosich/d351a5b0c4be0e9dfe6c3a37ab050929 to your computer and use it in GitHub Desktop.
Save kosich/d351a5b0c4be0e9dfe6c3a37ab050929 to your computer and use it in GitHub Desktop.
Exponential backoff example
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