在发出两个可观察对象的第一个值后,Zip 不发出值

Zip isn't emitting values after the first values from both observables have been emitted

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

我正在使用 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."

这是否意味着它不会响应,直到两个 observable 都发出一个值?因为 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);

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

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

Observable.combineLatest(this.route.params, this.dataCalculator.dataEmitter$)
  .subscribe(data => console.log(data));