1

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

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

你将如何优雅地编写这个结构 whenisYisZareObservables<boolean>以及xto be an Observable<Object[]>.

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

4

1 回答 1

1

combineLatestobservables当您有多个相互依赖以进行某些计算或确定时,最好使用运算符。请注意,combineLatest在每个 observable 发出至少一个值之前,它不会发出初始值。

你可以看看解释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]: []) 
])
于 2019-04-10T13:27:28.277 回答