如何解析多个可观察对象

dar*_*uby 3 javascript rxjs typescript rxjs5

我从服务中返回了2个(或更多)可观察对象,每个观察对象仅返回一个值(认为Observable.just())。它们每个都有不同的类型(我在用TypeScript编写,所以类型很重要)。

是否有办法知道所有Observable何时成功解决(使用Promise术语)或失败,我需要能够单独处理失败并继续下去。

人为的例子:

const obs1  = someService.getThisThing(); //Observable<Type1>
const obs2  = someService.getAnotherThing(); //Observable<Type2>

const someObj = {};

obs1.subscribe(v1 => someObj.v1 = v1);
obs2.subscribe(v2 => someObj.v2 = v2);

// call someFunc(someObj), only when both above observables resolved to a value
someFunc(someObj);
Run Code Online (Sandbox Code Playgroud)

我尝试使用,merge但随后我松开了类型安全性,因为值可能以任何顺序出现,并且我必须检查它们的类型.subscribe以确定哪个是哪个

我已经尝试过combinecombineLatest按照此处的描述进行操作-但随后它们都同时解析,并且如果1失败-一切都会失败

mar*_*tin 6

如果您需要能够分别处理每个错误,则必须catch()向每个Observable 追加(或其他一些运算符)。诸如forkJoin()或的操作员merge()总是在其任何来源发送错误时发送错误通知。

const Observable = Rx.Observable;

let sources = [
  Observable.of(123).catch((err) => Observable.of('caught error')),
  Observable.throw('error').catch((err) => Observable.of('caught error'))
];

Observable.forkJoin(...sources)
  .subscribe(values => console.log(values));
Run Code Online (Sandbox Code Playgroud)

观看现场演示:https : //jsbin.com/hirodef/3/edit?js,console

第二个Observable引发一个错误,该错误已被字符串捕获catch()并替换为caught error字符串。

该演示打印到控制台:

[123, "caught error"]
Run Code Online (Sandbox Code Playgroud)