RXJS 组合 x 个可观察量,其中 n 个是可选的

And*_*ald 7 rxjs

我试图将多个可观察量组合成一个用于从服务器检索数据的可观察量。

我最初的方法如下:

filters$ = combineLatest([
   filter1$,
   filter2$,
   filter3$
])
Run Code Online (Sandbox Code Playgroud)

这样我就可以将单个可观察的过滤器发送到服务器。

this.filters$.pipe(
   switchMap(filters => goToServer(filters))
)
Run Code Online (Sandbox Code Playgroud)

但是,如果其中一个过滤器可以根据使用系统的用户类型是可选的,我该如何解决这个问题。如果filter3$仅对某些用户可用,则过滤器将永远不会过滤无权访问它的用户。(API 可以很好地处理这个问题,并且该过滤器是可选的)

我可以使用以下方法来解决这个问题startWith()

filters$ = combineLatest([
   filter1$,
   filter2$,
   filter3$.pipe(
      startWith(null)
   )
])
Run Code Online (Sandbox Code Playgroud)

然而,这可能会给我提供对有权访问的用户的多个网络请求,filter3$理想情况下我想避免这些请求。

有人知道这个问题的优雅解决方案吗?一个真正很棒的方法是,如果combineLatest接受可选参数,则仅包含它们是否具有值,否则忽略它们。

Mox*_*arm 3

定义可观察数组并有条件地推送第三个。

const toBeUsedFilters = [filter1$, filter2$];
if (isFilter3Available) toBeUsedFilters.push(filter3$);

filters$ = combineLatest(toBeUsedFilters);
Run Code Online (Sandbox Code Playgroud)