Skip to content

Instantly share code, notes, and snippets.

View kosich's full-sized avatar

Kostia P kosich

View GitHub Profile
@kosich
kosich / index.js
Created April 28, 2019 17:00
retryWhen with promise
const { rxObserver } = require('api/v0.3');
const { defer } = require('rxjs');
const { retryWhen, tap, delay } = require('rxjs/operators');
defer(() => mockRequest()).pipe(
retryWhen(errors$ =>
errors$.pipe(
tap(rxObserver('retries')),
delay(10)
@kosich
kosich / index.js
Created April 28, 2019 11:35
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';
}
@kosich
kosich / index.js
Last active April 26, 2019 09:42
Cancel a delay if same observable emits
const { rxObserver } = require('api/v0.3');
const { Subject, of } = require('rxjs');
const { switchMap, delay } = require('rxjs/operators');
const subject = new Subject(0);
const result$ = subject
.pipe(
switchMap(value =>
// switchMap to a delayed value
@kosich
kosich / index.js
Last active April 24, 2019 17:45
example of concatMap with a Promise
const { rxObserver } = require('api/v0.3');
const { timer } = require('rxjs');
const { concatMap } = require('rxjs/operators');
// our source$ will emit values at
// 0, 100, 200, 300...
const source$ = timer(0, 100);
const concatMap$ = source$.pipe(
@kosich
kosich / index.js
Last active April 21, 2019 11:17
custom operator filterChanges to filter only increasing numbers
const { rxObserver } = require('api/v0.3');
const { timer, from, of, EMPTY, pipe } = require('rxjs');
const { zip, startWith, pairwise, switchMap, filter } = require('rxjs/operators');
// create a source using values
const values$ = from([ 5, 10, 20, 10, 5, 20, 0, 5 ]);
const source$ = timer(0, 10).pipe(
zip(values$, (_,x)=>x)
);
const { rxObserver } = require('api/v0.3');
const { timer, from, of, EMPTY } = require('rxjs');
const { zip, debounceTime, map, scan, distinctUntilChanged } = require('rxjs/operators');
// create a source using values
const values$ = from([ 5, 10, 20, 10, 5, 20, 0, 5, 30 ]);
const source$ = timer(0, 10).pipe(
zip(values$, (_,x)=>x)
);
@kosich
kosich / index.js
Created April 20, 2019 09:12
RXJS - Only emit bigger values than the last value
const { rxObserver } = require('api/v0.3');
const { timer, from, of, EMPTY } = require('rxjs');
const { zip, startWith, pairwise, switchMap } = require('rxjs/operators');
// create a source using values
const values$ = from([ 5, 10, 20, 10, 5, 20, 0, 5 ]);
const source$ = timer(0, 10).pipe(
zip(values$, (_,x)=>x)
);
@kosich
kosich / index.js
Created April 15, 2019 19:35
Using array of observable functions with each items output being the next items input
const { rxObserver, palette } = require('api/v0.3');
const { of } = require('rxjs');
const { switchMap, delay} = require('rxjs/operators');
const fns =
[ (value) => of(value + 1).pipe(delay(100))
, (value) => of(value + 3).pipe(delay(100))
, (value) => of(value + 5).pipe(delay(100))
]
@kosich
kosich / index.js
Last active April 5, 2019 08:33
Limited retries on error with a retryWhen
const { rxObserver } = require('api/v0.3');
const { timer, of, throwError } = require('rxjs');
const { merge, map, tap, take, finalize, retryWhen, switchMap } = require('rxjs/operators');
const sourceObserver = rxObserver('Source');
const errorsObserver = rxObserver('Errors');
const resultObserver = rxObserver('Result');
timer(10, 10).pipe(
map(x => {
@kosich
kosich / index.js
Created April 4, 2019 10:20
combineLatest with timers
const { rxObserver } = require('api/v0.3');
const { timer, combineLatest } = require('rxjs');
const { map, take } = require('rxjs/operators');
const timerOne = timer(100, 400);
const timerTwo = timer(200, 400);
const timerThree = timer(300, 400);
timerOne.subscribe(rxObserver());
timerTwo.subscribe(rxObserver());