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

标签 angular typescript rxjs observable behaviorsubject

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

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

相关文章:

angular - 无法让 ngPlural 运行 Angular

angular - 为什么我必须在 NgModule 的导入中使用 AlertModule.forRoot()?

arrays - 如何在嵌套的 FormArrays 中添加元素?

Angular v4 : Search by name with observable

node.js - 如何在node.js后端和Angular 2前端中使用jwt实现社交登录

angular - 在 Angular 中切换类的最佳方式

typescript - 使用 Typescript 和 Electron 还需要 Babel 吗?

reactjs - 来自 JSX 的推论与将 React 组件作为函数调用的对比

javascript - RxJS:处理 cycle.js 自定义驱动程序中的错误

javascript - 上一个成功完成后,如何对 api 进行新调用?