【问题标题】:What's the elegant way of writing CombineLatest with conditional arguments?用条件参数编写 CombineLatest 的优雅方式是什么?
【发布时间】:2019-04-10 13:02:33
【问题描述】:
在非异步代码中,我执行以下操作:
const x = [
...(isY ? [Y]: []),
...(isZ ? [Z] : [])
];
当isY 和isZ 是Observables<boolean>,而x 是Observable<Object[]> 时,您将如何优雅地编写此结构。
我可以使用各种映射来做到这一点,但没有什么看起来干净或优雅。
【问题讨论】:
标签:
arrays
merge
rxjs
combinelatest
【解决方案1】:
combineLatest 运算符最适合在您有多个长期存在的observables 时使用,它们相互依赖以进行某些计算或确定。
请注意,combineLatest 在每个 observable 发出至少一个值之前不会发出初始值。
您可以查看explanation 的combineLatest。
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]: [])
])