5

我正在尝试组合两个可观察对象,其中一个是路由参数,另一个是自定义参数。

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

我读了这个

“zip 运算符将订阅所有内部可观察对象,等待每个对象发出一个值。一旦发生这种情况,将发出具有相应索引的所有值。这将持续到至少一个内部可观察对象完成。”

这是否意味着在两个可观察对象都发出值之前它不会响应?因为路由参数 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);
4

2 回答 2

2

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

Observable.combineLatest(this.route.params, this.dataCalculator.dataEmitter$)
  .subscribe(data => console.log(data));
于 2017-07-20T08:02:46.403 回答
1

你的拉链工作得很好。null是一个值。您可以使用dataEmitter.filter(val => !isNullOrUndefined(val))过滤空值和未定义值。

于 2017-07-13T07:38:16.987 回答