我有两个可观察者
load$
是一个加载事件流,在启动时或单击重新加载按钮时发出selection$
是一个选定列表项的流,在选择列表项时会发出我想知道是否有一个运算符让我(A)在selection$
发出时获取load$
发出的最新值,而(B)忽略load$
发出的值1}}。
我能够通过使用withLatestFrom
来完成(A)但不满足(B)因为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
});
我已经查看switchMapTo
满足(B)但不满足(A)而不使用first()
或take(1)
。
load$.switchMapTo(selection$.take(1)).subscribe(latestSelection => {
// I would like to avoid having to use take(1)
});
我正在寻找一个假设的switchMapToLatestFrom
运营商。
load$.switchMapToLatestFrom(selection$).subscribe(latestSelection => {
// switchMapToLatestFrom doesn't exist :(
});
不幸的是它并不存在,我不喜欢我提出的另外两种方式,因为代码中包含take(1)
或未使用的参数的原因并不明显。
是否还有其他方法可以组合两个observable,以便只要第一个observable发出,新的observable就会从第二个observable中发出最新的值?
答案 0 :(得分:5)
withLatestFrom
使用可选的project
函数传递值。
您可以使用它忽略load$
中的值并仅发出最新选择:
load$
.withLatestFrom(selection$, (load, selection) => selection)
.subscribe(selection => {
// ...
});
答案 1 :(得分:1)
使用“样本”运算符 就您而言:
selection$.pipe(sample(load$)).subscribe(
// the code you want to run
)