Rxjs 不发出任何值的可观察的

Rxjs 不发出任何值的可观察的,rxjs,nativescript,ngrx,Rxjs,Nativescript,Ngrx,我有一个从web api调用返回的对象数组的可观察对象 我通过在其上运行一些可管道操作符(如过滤器)来创建另一个可观察对象。我知道该条件将不会满足数组中的任何当前项,但是我仍然希望收到一个默认值,因为生成的可观测值将用于对combineLatest的调用,并且除非至少发出一个值,否则combineLatest将不起作用 无论我做什么,如果原始数组中的任何项都不满足过滤器要求,我都无法让这个可观察对象发出值。下面是我采取的一些方法 this.firstItem$ = this.items$

我有一个从web api调用返回的对象数组的可观察对象

我通过在其上运行一些可管道操作符(如过滤器)来创建另一个可观察对象。我知道该条件将不会满足数组中的任何当前项,但是我仍然希望收到一个默认值,因为生成的可观测值将用于对
combineLatest
的调用,并且除非至少发出一个值,否则
combineLatest
将不起作用

无论我做什么,如果原始数组中的任何项都不满足过滤器要求,我都无法让这个可观察对象发出值。下面是我采取的一些方法

this.firstItem$ = this.items$
                      .pipe(map(xArray => xArray.filter(x => x.prop === true)),
                            flatMap(x => x),
                            defaultIfEmpty(null as Item));
当我订阅
this.firstItem$
时,不会发出任何消息

我甚至尝试将一个空的/空的项目添加到
this.firstItem$
,但仍然没有任何东西发出

this.firstItem$ = this.items$
                      .pipe(
                            flatMap(x => x),
                            filter(item => item.prop === true),
                            concat(of(null as Item)));

必须在defaultIfEmptyconcat发出其值之前完成可观测源


要完成可观察的源代码,您可以使用管道操作符,如:take、takeUntil(在defaultIfEmpty/concat之前)

如果没有从过滤器返回任何项目,则将开始工作?否。但如果符合您的用例,您可以在过滤器之前管道化它