Angular 角度2:顺序和并行服务调用

Angular 角度2:顺序和并行服务调用,angular,rxjs,Angular,Rxjs,我遇到了一个关于顺序和并行服务调用的主题。对于序列调用,我们可以使用flatmap/mergemap,对于并行调用,我们可以使用forkjoin 以下是我的疑问 1) flatmap和mergemap之间有什么区别?是否有任何具体的理由使用这两种方法中的任何一种 2) 如何为4-5次呼叫添加多个序列?如果使用多个订阅,flatmap和mergemap的区别是什么 this.service1.getCountry( .mergeMap(country => this.service1.g

我遇到了一个关于顺序和并行服务调用的主题。对于序列调用,我们可以使用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

  • flatMap
    ==
    mergeMap
    。flatMap只是mergeMap操作符的别名。()有讨论反对使用一个别名,但到目前为止,在v5中这两个别名都可用

  • 您可能对
    mergeMap
    operator()中的
    concurrency
    param感兴趣,它订阅了多个内部可观察对象

  • 这取决于用例。如果提供了可观察的发射并等待完成,则forkJoin可能是可行的。但如果任何一个可观测的完成没有发射,forkJoin将缩短curcuit并完成。相反,mergeMap更倾向于将内部可见光的发射平坦化为更高的可见光。因此,在forkJoin的情况下,您将获得每个innerObservable的值发射数组,而mergeMap将在每个innerObservable发射后立即发射单个值


  • 它在angularI中使用,所以我在angularI中对它进行了标记,我建议添加rxjs标记。一个没有角度方面经验的用户可以完全回答这个问题。我不清楚第二点。你能帮我在上面的例子中添加第三个服务呼叫吗。我第一次接到国家服务电话,第二次接到国家服务电话。第三,我想打电话给城市。你能把它加到我的代码里吗?