RxJs运算符简化:switchMap,combineLatest



我有以下RxJS订阅:

combineLatest([obs1$, obs2$])
.pipe(
filter(val=>!!val[0] && !!val[1]), // no null value on both
switchMap(([val1, val2]) => combineLatest([of(v1), getObs3$(v2)]))
)
.subscribe(([val1, val3]) => { ... });

代码按预期工作,但感觉很麻烦。我非常确信将switchMap与of((操作符组合在一起是可以改进的。

注意:为了调用getObs3$(v2),我需要首先确保obs1$中的值。此外,我确实需要订阅中的val1,因为我稍后会使用它。

有人知道如何优化这个吗?

一种可能性:

combineLatest([obs1$, obs2$]).pipe(
// no null value on both
filter(val=>!!val[0] && !!val[1]),
switchMap(([val1, val2]) => getObs3$(val2).pipe(
map(val3 => [val1,val3])
))
).subscribe(([val1, val3]) => { ... });

这是你经常看到的一般模式。在这里,我们将val3插入到元组中,因此它与combine-latest没有太大区别,但如果它正在丰富一个对象(无论嵌套程度如何(,同样的模式也会适用。

最新更新