Skip to content

Instantly share code, notes, and snippets.

@kosich
Last active March 18, 2019 15:41
Show Gist options
  • Save kosich/11d9457e53282dbe9eff1d48d58db24d to your computer and use it in GitHub Desktop.
Save kosich/11d9457e53282dbe9eff1d48d58db24d to your computer and use it in GitHub Desktop.
retryWhen completing with inner observable
const { rxObserver } = require('api/v0.3');
const { timer, NEVER } = require('rxjs');
const { merge, map, tap, take, finalize, retryWhen } = require('rxjs/operators');
const sourceObserver = rxObserver('Source');
const errorsObserver = rxObserver('Errors');
const resultObserver = rxObserver('Result');
timer(10, 10).pipe(
map(x => {
const time = Date.now();
if (time <= 30) {
throw x;
}
return x;
}),
tap(sourceObserver),
retryWhen(errors$ =>
errors$.pipe(
take(3),
// uncomment this to prolong inner observable
// merge(NEVER),
// visualization
tap(errorsObserver),
finalize(errorsObserver.complete)
)
),
take(10)
)
.subscribe(resultObserver);
@kosich
Copy link
Author

kosich commented Mar 18, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment