在非异步代码中,我执行以下操作:
const x = [
...(isY ? [Y]: []),
...(isZ ? [Z] : [])
];
当isY
和isZ
为Observables<boolean>
且x
为Observable<Object[]>
时,您如何优雅地编写此结构。
我可以通过各种映射来做到这一点,但是看起来没有什么是干净或优雅的。
答案 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]: [])
])