【问题标题】:combine 2 observables into 1 with condition in angular将 2 个 observables 合并为 1 个,条件为 angular
【发布时间】:2020-06-11 06:03:34
【问题描述】:

我有一个 ionic-angular 应用程序,它从 google firestore 加载 2 个 observables。

Observable A 返回一个对象数组(组)。 Observable B 返回一个对象数组(联系人)。

group = [ name: string, adminID: string ]
contact = [ name: string, userID: string ]

现在我想将这两个订阅与以下条件结合起来:

if ( group.adminID = contact.userID ) {
   group.adminData = contact
}

并将其作为一个数组返回。

我用 combineLatest 尝试过,但我对 rxjs 真的很陌生,但没有找到解决方案。 我也不确定 combineLatest 是否适合这种情况,但我认为这对专业人士来说并不是一项艰巨的任务!

【问题讨论】:

    标签: angular ionic-framework observable subscription


    【解决方案1】:

    当你使用 Observables 时,你可以使用 Pipe 然后 Map 来合并两个数组

    https://rxjs-dev.firebaseapp.com/guide/operators

    也许这个答案对你有帮助:

    Mapping between two arrays of observable classes

    【讨论】:

    • Michael D 对我的问题有正确的答案,这也是解决方案。我之前尝试过承诺,但这不起作用。合并数组不是问题,处理与 2 个订阅的合并是问题。这可以通过 Michael D 的解决方案来解决。
    【解决方案2】:

    您可以使用zip

    Observable.zip(groupObservable, contactObservable).subscribe(
      ([group, contact]) => {
        if ( group.adminID = contact.userID ) {
          group.adminData = contact
        }
      }
    );
    

    根据您的要求,您也可以使用combineLatest。不同之处在于zip 在推送之前等待所有可观察对象发出一个值,combineLatest 将推送新值,即使其中一个可观察对象发出一个值,因为这两个可观察对象已经发出了至少一个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      • 2013-11-05
      • 2020-12-06
      相关资源
      最近更新 更多