【问题标题】:How to synchronize 3 observables?如何同步 3 个 observables?
【发布时间】:2021-08-05 17:30:05
【问题描述】:

我有 3 个可观察对象 a、b 和 c,我在页面加载时调用它们来获取所需的数据。 b 依赖于 a。 c 是独立的。

我想知道我何时从所有这些数据中获取数据,以便我可以将 is loading 设置为 false。另外,在捕获错误和同步这些 observables 方面,最佳实践是什么?

【问题讨论】:

  • 这里无法为您提供帮助 - 您应该发布您尝试完成此操作的服务或组件。
  • 我们很乐意提供帮助,但为了提供有用的回复,我们需要更多地了解您想要实现的目标。您能否提供一些代码(或至少一些伪代码)或更好地构建一个堆栈闪电战来演示您的特定场景?这是一种可能性:stackblitz.com/edit/angular-posts-with-three-chains

标签: angular rxjs operators


【解决方案1】:

既然你写了“a 依赖于b”,那么我可以假设b 类似于a.pipe(...),显然如果b 收到了一个值,那么a 也收到了它。

然后我们需要知道bc 何时收到将loading 设置为false 的值。 为此,您可以使用combineLatest 运算符。有关详细信息和要求的最佳实践,请查看这篇精彩的文章: https://indepth.dev/posts/1114/learn-to-combine-rxjs-sequences-with-super-intuitive-interactive-diagrams#combinelatest

【讨论】:

    【解决方案2】:

    zip 函数非常适合这种情况。只有当所有传递给它的 observables 都发出时它才会发出

    基本上:

    zip(a,b,c).subscribe(_ => this.loading = false); 
    
    // potentially also zip(b,c) since a is dependant on b but since 
    // no code was provided , its hard to tell
    

    你可以通过管道传递一个 catchError() 以防出错

    参考:https://www.learnrxjs.io/learn-rxjs/operators/combination/zip#after-all-observables-emit-emit-values-as-an-array)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 2019-03-14
      • 2017-12-29
      • 2019-12-10
      • 1970-01-01
      • 2017-04-18
      • 2020-03-21
      相关资源
      最近更新 更多