可观察到不发出任何值

时间:2018-03-27 22:15:23

标签: rxjs nativescript ngrx

我有一个Observable,它是从we​​b api调用返回的一个对象数组。

我通过在其上运行一些可管理的运算符(如filter)来创建另一个observable。我知道条件不会满足数组中的任何当前项,但我仍然希望收到一个默认值,因为结果observable用于调用combineLatest进一步向下轨道和除非至少发出一个值,否则combineLatest将无效。

无论我做什么,如果原始数组中的所有项都不符合过滤器要求,我就无法获得此可观察值。请参阅下面我采取的一些方法

this.firstItem$ = this.items$
                      .pipe(map(xArray => xArray.filter(x => x.prop === true)),
                            flatMap(x => x),
                            defaultIfEmpty(null as Item));

当我订阅this.firstItem$时,没有发出任何内容

我甚至尝试将concat空/空项目this.firstItem$,但仍然没有发出

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

1 个答案:

答案 0 :(得分:1)

必须在 defaultIfEmpty concat 发出其值之前完成源Observable。

要完成源Observable,您可以管道运算符,例如:take,takeUntil(在defaultIfEmpty / concat之前)