如何在源Observable发出但仅使用最新值时切换到另一个Observable

Ste*_*ens 3 javascript reactive-programming rxjs

我有两个可观察者

  • load$ 是一个加载事件流,在启动时或单击重新加载按钮时发出
  • selection$ 是选定列表项时发出的选定列表项的流

我想知道是否有一个运算符让我(A)得到selection$每次load$发出时发出的最新值,而(B)忽略发出的值load$.

我能够通过使用withLatestFrom但不满足(B)来完成(A),因为withLatestFrom不会忽略源可观察的.

load$.withLatestFrom(selection$).subscribe(([_, latestSelection) => {
  // _ is not needed and I don't like to write code like this
  // I only need the latest selection
});
Run Code Online (Sandbox Code Playgroud)

我看过switchMapTo哪个满足(B)但不满足(A)而不使用first()take(1).

load$.switchMapTo(selection$.take(1)).subscribe(latestSelection => {
  // I would like to avoid having to use take(1)
});
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个假设的switchMapToLatestFrom运营商.

load$.switchMapToLatestFrom(selection$).subscribe(latestSelection => {
  // switchMapToLatestFrom doesn't exist :(
});
Run Code Online (Sandbox Code Playgroud)

不幸的是它不存在,我不喜欢我提出的另外两种方式,因为代码包含take(1)或未使用的参数并不是很明显.

有没有其他方法可以组合两个observable,以便只要第一个observable发出,新的observable只发出第二个observable的最新值?

car*_*ant 6

withLatestFrom采用project传递值的可选函数.

您可以使用它来忽略值load$并仅发出最新选择:

load$
  .withLatestFrom(selection$, (load, selection) => selection)
  .subscribe(selection => {
    // ...
  });
Run Code Online (Sandbox Code Playgroud)