首页 > 解决方案 > 用另外两个 observable 喂一个 observable

问题描述

我有一个包含 3 个 Web 服务的场景,比如 A、B 和 C。

A 和 B 可以在没有参数的情况下调用。C 需要来自 A 和 B 的参数。例如:

   http.get("A").subscribe(x => console.log(x))
   // prints 'goofy'
   http.get("B").subscribe(y => console.log(y))
   // prints 'mickey'
   http.get("C?param1=goofy&param2=mickey").subscribe(z => console.log(z))
   // prints 'daisy'

我想知道如何创建一个单独的 Observable 来完成这项工作,以及它的订阅从 web 服务 C 返回结果。

  obs1 = http.get("A")
  obs2 = http.get("B")
  f3 = (x,y => http.get("C?param1="+x+"&param2="+y))
  bigObservable = someconcatenationof(obs1, obs2, f3)

我想要那个

  bigObservable.subscribe(z => console.log(z))
  // should print "daisy"

我想这个问题可以概括一点:A、B、C 不需要是 web 服务,它们可以只是某种 Observable,其中 C 的构造函数需要来自 A 和 B 的结果。

标签: javascriptrxjsangular-httpclientrxjs-observables

解决方案


我认为这将是一种方法:

forkJoin({
  a: http.get("A"),
  b: http.get("B"),
}).pipe(
  mergeMap(({ a, b }) => http.get(`C?param1=${a}&param2=${b}`))
)

forkJoin将同时订阅所有提供的可观察对象,并在所有对象完成时发出它们的最后一个值。


推荐阅读