Reputation: 2964
Script
import { forkJoin, zip, combineLatest, Subject, ReplaySubject } from 'rxjs';
import { withLatestFrom, take, first } from 'rxjs/operators';
const letters: string = 'abcdefghijklmnopqrstuvwxyz';
function getLetter(i: number) : string {
const l: string = letters[i].toString();
console.log(` letter ${l}`);
return letters[i].toString();
}
function getNumber(i: number) : string {
const l: string = letters[i].toString();
console.log(` number ${i}`);
return i.toString();
}
const sa = new ReplaySubject<string>(1);
const sz = new ReplaySubject<string>(1);
combineLatest(sa, sz)
.subscribe(([a, z]) => {console.log(`s: ${a}-${z}`);});
var i: number = 0;
var b: boolean = true;
while(i < 10) {
console.log(`i: ${i}`);
sa.next(getNumber(i));
if(b) {
sa.next(getLetter(i));
}
i++;
b = !b;
}
Output
C:\Work\ts-experiments>tsc
C:\Work\ts-experiments>node dist\index.js
i: 0
number 0
letter a
i: 1
number 1
i: 2
number 2
letter c
i: 3
number 3
i: 4
number 4
letter e
i: 5
number 5
i: 6
number 6
letter g
i: 7
number 7
i: 8
number 8
letter i
i: 9
number 9
C:\Work\ts-experiments>
Why nothing from the .subscribe
?
(Unfortunately this doesn't work in JSFiddle.)
Upvotes: 1
Views: 209
Reputation: 13079
Because sz
never fires. For combineLatest
to fire, all of the observables should emit at least once.
Upvotes: 2