我有一个从 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$
时,没有发出任何内容
我什至尝试将一个空/空项目concat
到this.firstItem$
,但仍然没有发出任何内容
this.firstItem$ = this.items$
.pipe(
flatMap(x => x),
filter(item => item.prop === true),
concat(of(null as Item)));
最佳答案
源 Observable 必须在 defaultIfEmpty 或 concat 发出其值之前完成。
要完成源 Observable,您可以使用管道运算符,例如:take、takeUntil(在 defaultIfEmpty/concat 之前)
关于rxjs - Observable 不发出任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49523280/