【问题标题】:RxJs combineLatest subscribe never firesRxJs combineLatest 订阅永远不会触发
【发布时间】:2021-12-22 00:58:52
【问题描述】:

脚本

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;
}

输出

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>

为什么.subscribe 没有消息?

(不幸的是,这在 JSFiddle 中不起作用。)

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    因为sz 永远不会触发。要让combineLatest 触发,所有可观察对象都应至少发出一次。

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 2018-03-19
      • 2023-03-12
      • 2018-10-26
      • 2022-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多