我正在尝试组合两个observable,其中一个是路由参数,另一个是自定义的。
我正在使用zip
,因为forkJoin
似乎不起作用。但拉链表现得很奇怪,因为当我发出自定义的拉链时,我没有得到那个价值。我只得到第一个空值,它已作为默认的发射值提供给我的BehaviorSubject
。
我读了这个
“zip操作员将订阅所有内部可观察者,等待 每个都发出一个值。一旦发生这种情况,所有的值都与 将发出相应的指数。这将持续至少 一个内在的观察者完成了。“
这是否意味着在两个观察者都发出一个值之前它不会响应?因为路径params observable只会发出一次,但dataEmitter
将继续发出值。在这种情况下使用的正确运算符是什么?
以下是我的一些代码:
我的服务中的发射器:
private dataEmitter: BehaviorSubject<any> = new BehaviorSubject<any>(null);
组件订阅,仅从null
获取dataEmitter
,从不this.calculatedData
:
Observable.zip(this.route.params, this.dataCalculator.dataEmitter$)
.subscribe(data => console.log(data));
在完成所有计算后调用:
this.dataEmitter.next(this.calculatedData);
答案 0 :(得分:1)
正如@cartant指出,切换到combineLatest
按预期工作:
Observable.combineLatest(this.route.params, this.dataCalculator.dataEmitter$)
.subscribe(data => console.log(data));
答案 1 :(得分:0)
你的拉链工作正常。 null
是一个值。您可以使用dataEmitter.filter(val => !isNullOrUndefined(val))
来过滤空值和未定义的值。