Richard Barraclough
Richard Barraclough

Reputation: 2964

RxJs combineLatest subscribe never fires

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

Answers (1)

s.alem
s.alem

Reputation: 13079

Because sz never fires. For combineLatest to fire, all of the observables should emit at least once.

Upvotes: 2

Related Questions