根据条件

时间:2016-10-15 19:47:57

标签: angular rxjs rxjs5

我正在编写一个ng2应用程序并使用基于暴露可观察对象的行为主题的应用程序状态服务。对于大多数用例,我想使用可观察的A来查找嵌套对象。我发现了一个奇怪的例子,Observable A没有获得这些数据,但它在Observable B中可观察到A& B都可以从我的应用程序状态服务中获得。

现在在我的组件中它看起来像这样

  sharedState: Observable<any>;

  constructor(private appStateService: AppStateService) {
    this.sharedState = appStateService.shared$;
  }

然后在我看来:

<div>{{ (sharedState | async)?.loadedAccountDetails?.accountId }}</div>

作为一个例子。我想在组件中现在需要做的是:

  1. 订阅Observable A并检查它是否有我的loadedAccountDetails和帐户ID等
  2. 如果A没有此值,请使用B
  3. 我希望在组件中做的只是暴露/有一个Observable的实例变量,这样我就可以保持我的view / html一样。

    即使您不熟悉Angular 2,我也可以参与其中,但需要帮助理解如何使用observables几乎实现if语句。

2 个答案:

答案 0 :(得分:1)

试试这个:

Observable
  // When any of the inner observables emit, supply latest from all
  .combineLatest(observableA, observableB)
  // Emit either result
  .map(([resultA, resultB]) => resultA || resultB)
  // Test it
  .subscribe(console.info)

如果找不到您要查找的内容,请确保observableA/B不会发出任何内容(例如,使用.filter(Boolean))。

答案 1 :(得分:0)

您可能还想考虑amb,它使用任何一个observable先发出一个值而取消订阅第二个:

Observable.amb(
    firstSource.filter(x => x.loadedAccountDetails),
    secondSource.filter(x => x.loadedAccountDetails)
)
.subscribe(x => { })