我正在尝试组合两个可观察对象,其中一个是路由参数,另一个是自定义参数。
我正在使用 zip
因为 forkJoin
似乎不起作用。但是 zip 表现得很奇怪,因为当我发出自定义的时,我没有得到那个值。我只得到第一个空值,它已作为默认发射值提供给我的 BehaviorSubject
。
我读过这个
"The zip operator will subscribe to all inner observables, waiting for each to emit a value. Once this occurs, all values with the corresponding index will be emitted. This will continue until at least one inner observable completes."
这是否意味着在两个可观察对象都发出值之前它不会响应?因为 route params observable 只会发射一次,但是 dataEmitter
会持续发射值。在这种情况下,正确的运算符是什么?
这是我的一些代码:
我的服务中的发射器:
private dataEmitter: BehaviorSubject<any> = new BehaviorSubject<any>(null);
组件订阅,只从dataEmitter
获取null
,从不获取this.calculatedData
:
Observable.zip(this.route.params, this.dataCalculator.dataEmitter$)
.subscribe(data => console.log(data));
当所有的计算都完成后调用:
this.dataEmitter.next(this.calculatedData);
最佳答案
正如@cartant 所指出的,切换到 combineLatest
会按预期工作:
Observable.combineLatest(this.route.params, this.dataCalculator.dataEmitter$)
.subscribe(data => console.log(data));
关于angular - 在发出两个可观察对象的第一个值后,Zip 不发出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45074160/