Какой элегантный способ написания CombineLatest с условными аргументами? - PullRequest
1 голос
/ 10 апреля 2019

В неасинхронном коде я делаю следующее:

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

Как бы вы элегантно написали эту структуру, когда isY и isZ равны Observables<boolean>, а x должны бытьObservable<Object[]>.

Я могу сделать это с любыми типами отображений, но ничто не выглядит чистым или элегантным.

1 Ответ

1 голос
/ 10 апреля 2019
Оператор

combineLatest лучше всего использовать, когда у вас есть несколько долгоживущих observables, которые полагаются друг на друга для некоторых вычислений или определений.Имейте в виду, что combineLatest не будет излучать начальное значение, пока каждое наблюдаемое не выдаст хотя бы одно значение.

Вы можете взглянуть на объяснение для combineLatest.

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

РЕДАКТИРОВАТЬ: Вы также можете использовать функцию проекта combLatest, поэтому она может быть даже более краткой, выполнив

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