首页 > 解决方案 > 如何跳过空数组观察者?

问题描述

我使用combineLatest运算符:

   combineLatest(...this.filtersList.map((f) => f.filtersChanges)).subscribe((data) => {
            console.log(data);
   });

它获取每个流中最新发出的更改:f.filtersChanges并返回值数组:[value1, value2]

我的问题是,如果返回的空值数组没有变化:[null, null]

如何在justnull或boolean上替换它?

我试过过滤器:

combineLatest(...this.filtersList.filter((filter) => filter.filtersChanges.getValue()).map((f) => f.filtersChanges)).subscribe(
            (data) => {
                console.log(data);
            },
        );

但它永远不会起作用,如果删除filter()它会起作用ю

这是有效的,但不能跳过[null, null]

combineLatest(this.filtersList.map((f) => f.filtersChanges)).subscribe((data) => {
});

标签: angularrxjs

解决方案


利用

combineLatest(...this.filtersList.map((f) => f.filtersChanges))
.pipe(skipWhile(result => result.every(val => val == null)))
.subscribe((data) => {
  console.log(data);
});

如果订阅中的某些值为空,则跳过任何结果的发射。或者,result.some如果您不需要null其他数据的任何值,则可以使用。

如果您false在数据为空时需要结果,则使用此变体。

combineLatest(...this.filtersList.map((f) => f.filtersChanges))
.pipe(map(result => result.every(val => val == null) ? false : result))
.subscribe((data) => {
  console.log(data);
});

推荐阅读