-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrace.js
39 lines (36 loc) · 1.2 KB
/
race.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
const Rx = require('rxjs/Rx');
const race = require('rxjs/observable/race').race;
const interval = require('rxjs/observable/interval').interval;
const tap = require('rxjs/operators/tap').tap;
const map = require('rxjs/operators/map').map;
const take = require('rxjs/operators/take').take;
const of = require('rxjs/observable/of').of;
const mergeMap = require('rxjs/operators/mergeMap').mergeMap;
require('rxjs/add/operator/delay');
const o1 = interval(1000).pipe(map(_ => `A ${_}`)); // Never
const o2 = interval(800).pipe(map(_ => `B ${_}`)); // Never
const o3 = Rx.Observable.create(subscriber => {
of('C 1')
.delay(700)
.subscribe(_ => subscriber.next(_));
of('C 2')
.delay(1400)
.subscribe(_ => subscriber.next(_));
of('C 3')
.delay(1600)
.subscribe(_ => subscriber.next(_));
});
race([o1, o2, o3]) // never will o1 and o2 be emitted
.pipe(
tap(console.log),
take(2),
mergeMap(_ => of(`Calling ${_}, which should be called twice.`).delay(5000)),
tap(console.log),
)
.subscribe();
/**
C 1
C 2
Calling C 1, which should be called twice.
Calling C 2, which should be called twice.
*/