@ -0,0 +1,26 @@
|
||||
|
||||
import { ajax } from 'rxjs/observable/dom/ajax';
|
||||
import { range } from 'rxjs/observable/range';
|
||||
import { timer } from 'rxjs/observable/timer';
|
||||
import { pipe } from 'rxjs/util/pipe';
|
||||
import { retryWhen, zip, map, mergeMap } from 'rxjs/operators';
|
||||
|
||||
function backoff(maxTries, ms) {
|
||||
return pipe(
|
||||
retryWhen(attempts => range(1, maxTries)
|
||||
.pipe(
|
||||
zip(attempts, (i) => i),
|
||||
map(i => i * i),
|
||||
mergeMap(i => timer(i * ms))
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
ajax('/api/endpoint')
|
||||
.pipe(backoff(3, 250))
|
||||
.subscribe(data => handleData(data));
|
||||
|
||||
function handleData(data) {
|
||||
// ...
|
||||
}
|
Reference in New Issue
Block a user