用另外两个 observable 喂给一个 observable

问题描述

我有一个包含 3 个网络服务的场景,比如 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 来完成这项工作,并且它的订阅返回 webservice 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 不需要是网络服务,它们可以是某种 Observable,其中 C 的构造函数需要 A 和 B 的结果。

解决方法

我认为这是一种方法:

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

forkJoin 将同时订阅所有提供的 observable,并在它们全部完成时发出它们的最后一个值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...