RxJS仅在第一个(源)可观察对象发出值而其他不合并其他可观察对象时才发出值

时间:2020-09-03 11:31:00

标签: javascript rxjs

所以我要在这里实现的是仅在combineLatest([subject1$, subject2$])发出值时才获得source$的结果。

问题是,无论我使用该订阅的哪个运营商在subject1$subject2$发出值时(这就是switchMap的工作方式),都会吃午饭。现在,我很难为此找到合适的运算符,我想我正在寻找更多的模式。

    const source$ = fromEvent(document, 'click');
    const subject1$ = new Subject() // can emit one or more values in unknown time
    const subject2$ = new Subject() // can emit one or more values in unknown time

    setInterval(() => { subject1$.next(1) }, 1000)
    setInterval(() => { subject2$.next('a') }, 2000)

    source$
      .pipe(
        switchMap(() => combineLatest([subject1$, subject2$])), // obviously does not work
      )
      .subscribe(([subject1, subject2]) => {
        console.log(subject1, subject2);
      });

非常感谢,

1 个答案:

答案 0 :(得分:2)

使用withLatestFrom

source$.pipe(
  withLatestFrom(combineLatest([subject1$, subject2$]))
)
.subscribe(([_,[subject1, subject2]]) => {
  console.log(subject1, subject2);
})