-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdelay-functions.ts
More file actions
24 lines (20 loc) · 885 Bytes
/
delay-functions.ts
File metadata and controls
24 lines (20 loc) · 885 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { Observable } from 'rxjs/Observable';
import { startWith, take, concatMap } from 'rxjs/operators';
import 'rxjs/add/observable/interval';
import 'rxjs/add/observable/of';
import { MonoTypeOperatorFunction } from 'rxjs/interfaces';
function erlangInterval(ratePerMinute)
{
return (-1/ratePerMinute*Math.log(Math.random()))*60000;
}
export function naturalDelay<T>(ratePerMinute: number): MonoTypeOperatorFunction<T> {
return (source) => source.pipe(
concatMap(u=> Observable.interval(erlangInterval(ratePerMinute)).pipe(take(1)), u => u)
);
}
export function constantDelay<T>(ratePerMinute: number): MonoTypeOperatorFunction<T> {
return (source) => source.pipe(
concatMap(u=> Observable.interval(60000/ratePerMinute).pipe(take(1)), u => u)
);
}
Observable.of(...[10,20,30,40,50,60,70,80,90,100]).pipe(naturalDelay(30)).subscribe(console.log);