rxjs - Observable 不发出任何值

标签 rxjs nativescript ngrx

我有一个从 Web API 调用返回的对象数组的 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$ 时,没有发出任何内容

我什至尝试将一个空/空项目concatthis.firstItem$,但仍然没有发出任何内容

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

最佳答案

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

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

关于rxjs - Observable 不发出任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49523280/

相关文章:

angular - 如何修复 Typescript 可订阅接口(interface)错误?

javascript - TSLint 烦人的消息

angular - 如何在不将所有代码更改为 Promise 的情况下等待 rxjs Observable

node.js - 通过 JavaScript 响应式(Reactive)扩展使用 Mongoose Stream

javascript - Nativescript Angular : Can't read object from inside a function (this. 未定义?)

javascript - 为什么 'share PDF' 和 'open PDF' 无法在使用 Nativescript 版本 6.2 的 Android 上运行

angular - @ngrx 在递归使用智能组件时从存储中选择特定的状态片段

angular - @ngrx 具有多个有效负载的操作

npm - nativescript 项目中的两个 package.json 文件

angular - @ngrx/router-store 对比@angular/router