我有 2 个(或更多)从服务返回的 Observable,每个只返回一个值(想想 Observable.just()
)。它们中的每一个都是不同的类型(我正在用 TypeScript 编写,所以类型很重要)。
有没有办法知道所有 Observables 何时成功或失败地解决(使用 promises 术语),我需要能够单独处理失败,然后继续。
人为的例子:
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);
我尝试过使用 merge
但随后我失去了类型安全性,因为值可能以任何顺序出现,我必须在 .subscribe
中检查它们的类型以确定哪个是哪个
我已经尝试了 combine
和 combineLatest
描述 here - 但随后它们同时解决,如果 1 失败 - 一切都失败
最佳答案
如果您需要能够单独处理每个错误,那么您必须将 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));
查看现场演示:https://jsbin.com/hirodef/3/edit?js,console
第二个 Observable 抛出一个错误,该错误被 catch()
捕获并替换为 caught error
字符串。
这个演示打印到控制台:
[123, "caught error"]
关于javascript - 如何解析多个 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813747/