【问题标题】:Angular 2: sequence and parallel service callsAngular 2:顺序和并行服务调用
【发布时间】:2017-12-09 14:08:51
【问题描述】:

我遇到了一个关于顺序和并行服务调用的话题。对于顺序调用,我们可以使用 flatmap/mergemap,对于并行调用,我们可以使用 forkjoin。

以下是我的疑问

1) flatmap 和mergemap 有什么区别?是否有任何具体原因要使用其中任何一个。

2) 如何为 4-5 次通话添加多个序列?如果我使用多个订阅,flatmap 和 mergemap 有什么区别?

this.service1.getCountry(
  .mergeMap(country => this.service1.getState(country[0]))
  .subscribe(state = > state.json());
);

3) forkjoin 用于加入多个并行服务调用。如果我使用一个方法并在该方法中调用多个服务而不是使用 forkjoin 会怎样。使用 forkJoin 的任何具体原因

【问题讨论】:

  • 它被用于角度,所以我用角度标记它
  • 我建议添加 rxjs 标签。没有 Angular 经验的用户完全可以回答。

标签: angular rxjs


【解决方案1】:
  1. flatMap === mergeMap。 flatMap 只是 mergeMap 运算符的别名。 (https://github.com/ReactiveX/rxjs/blob/master/src/add/operator/mergeMap.ts#L5-L6) 讨论过要弃用一个别名,但目前在 v5 中两者都可用。

  2. 您可能对订阅多个内部 observable 的 mergeMap 运算符 (https://github.com/ReactiveX/rxjs/blob/master/spec/operators/mergeMap-spec.ts#L308-L325) 中的 concurrency 参数感兴趣。

  3. 这取决于用例。如果提供 observable 保证发出并等待完成,forkJoin 可能是可行的。但是,如果任何 observable 完成时没有发射,forkJoin 将缩短并完成。相反,mergeMap 更倾向于将内部 observable 的发射扁平化为更高的 observable。因此,在 forkJoin 的情况下,您将获得每个内部可观察对象的值发射数组,而 mergeMap 将在每个内部可观察对象发出时发出单个值。

【讨论】:

  • 我不清楚第二点。你能帮我在上面的例子中添加第三个服务电话吗?第一个服务电话我得到国家,第二个我得到国家。第三,我想打电话给城市。你能把它添加到我的代码中吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-03
  • 2019-06-25
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2017-02-08
相关资源
最近更新 更多