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以确定哪个是哪个
我已经尝试过combine并combineLatest按照此处的描述进行操作-但随后它们都同时解析,并且如果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));
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)
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |