用条件参数编写CombineLatest的优雅方法是什么?

时间:2019-04-10 13:02:33

标签: arrays merge rxjs combinelatest

在非异步代码中,我执行以下操作:

    const x = [
        ...(isY ? [Y]: []),
        ...(isZ ? [Z] : [])
    ];

isYisZObservables<boolean>xObservable<Object[]>时,您如何优雅地编写此结构。

我可以通过各种映射来做到这一点,但是看起来没有什么是干净或优雅的。

1 个答案:

答案 0 :(得分:1)

combineLatest运算符最适用于您有多个相互依赖的长寿命observables进行计算或确定的情况。 请注意,combineLatest会在每个可观察对象发出至少一个值之前不会发出初始值。

您可以查看combineLatest的{​​{3}}。

const x: Observable<any[]> = combineLatest(isY$, isZ$).pipe(
    map([isY, isZ] => {
        return [
            ...(isY ? [Y]: []),
            ...(isZ ? [Z]: [])
        ]
    })
)

编辑: 您还可以使用CombineLatest项目功能,因此甚至可以通过

const x: Observable<any[]> = combineLatest(isY$, isZ$, (isY, isZ) => [ 
   ...(isY ? [Y]: []), 
   ...(isZ ? [Z]: []) 
])