用条件参数编写 CombineLatest 的优雅方式是什么?
What's the elegant way of writing CombineLatest with conditional arguments?
在非异步代码中,我执行以下操作:
const x = [
...(isY ? [Y]: []),
...(isZ ? [Z] : [])
];
当 isY
和 isZ
是 Observables<boolean>
并且 x
是 Observable<Object[]>
.[=16= 时,你会如何优雅地写这个结构]
我可以用各种映射来做到这一点,但没有任何东西看起来干净或优雅。
combineLatest
运算符最好在您有多个长期存在的 observables
时使用,它们相互依赖以进行某些计算或确定。
请注意 combineLatest
在每个可观察对象至少发出一个值之前不会发出初始值。
您可以查看 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]: [])
])
在非异步代码中,我执行以下操作:
const x = [
...(isY ? [Y]: []),
...(isZ ? [Z] : [])
];
当 isY
和 isZ
是 Observables<boolean>
并且 x
是 Observable<Object[]>
.[=16= 时,你会如何优雅地写这个结构]
我可以用各种映射来做到这一点,但没有任何东西看起来干净或优雅。
combineLatest
运算符最好在您有多个长期存在的 observables
时使用,它们相互依赖以进行某些计算或确定。
请注意 combineLatest
在每个可观察对象至少发出一个值之前不会发出初始值。
您可以查看 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]: [])
])