在两个 observables 的第一个值发出后,Zip 不会发出值

Chr*_*odz 5 observable rxjs typescript behaviorsubject angular

我正在尝试组合两个 observable,一个是路由参数,另一个是自定义的。

我正在使用,zip因为forkJoin似乎不起作用。但是 zip 表现得很奇怪,因为当我发出自定义的 zip 时,我没有得到那个值。我只得到第一个空值,该值已BehaviorSubject作为默认发出值提供给我。

我读了这个

“zip 操作符将订阅所有内部 observable,等待每个内部 observable 发出一个值。一旦发生这种情况,将发出具有相应索引的所有值。这将一直持续到至少一个内部 observable 完成。”

这是否意味着它不会响应直到两个 observable 都发出一个值?因为路由参数 observable 只会发出一次,但dataEmitter会继续发出值。在这种情况下使用的正确运算符是什么?

这是我的一些代码:

我的服务中的发射器:

private dataEmitter: BehaviorSubject<any> = new BehaviorSubject<any>(null);
Run Code Online (Sandbox Code Playgroud)

组件订阅,只null从 获取dataEmitter,从不this.calculatedData

Observable.zip(this.route.params, this.dataCalculator.dataEmitter$)
  .subscribe(data => console.log(data));
Run Code Online (Sandbox Code Playgroud)

当所有计算完成后调用:

this.dataEmitter.next(this.calculatedData);
Run Code Online (Sandbox Code Playgroud)

Chr*_*odz 2

正如 @cartant 所指出的,切换到combineLatest按预期工作:

Observable.combineLatest(this.route.params, this.dataCalculator.dataEmitter$)
  .subscribe(data => console.log(data));
Run Code Online (Sandbox Code Playgroud)