使用 combineLatest 时如何捕获链式 rxjs 可观察对象的错误?
How to trap errors from chained rxjs observables when using combineLatest?
从 开始,我有以下
Observable.combineLatest(
this.translate.get("key1"),
this.translate.get(""),
this.translate.get("key3"),
this.translate.get("key4")
)
.subscribe(([result1, result2, result3, result4]) => {
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
},
error => {
console.log(`${error}`);
});
在第 2 行我得到一个错误,但这似乎没有进入上面的 error
处理程序。不幸的是,我发现的例子和 doco 似乎没有包括如何捕获错误(假设上面的方法可行)。
有没有人知道如何做到这一点?
在我看来,this.translate.get("")
可能正在验证一个参数并抛出 'outside' 可观察对象(即在它创建可观察对象之前)。
您可以使用如下代码验证错误处理:
import "rxjs/add/observable/throw";
Observable.combineLatest(
this.translate.get("key1"),
Observable.throw(new Error("Boom!")),
this.translate.get("key3"),
this.translate.get("key4")
)
.subscribe(
([result1, result2, result3, result4]) => {
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
},
error => {
console.log(`${error}`);
}
);
并且您可以验证 this.translate.get("")
正在抛出 observable 的错误 'outside',如下所示:
import "rxjs/add/observable/defer";
Observable.combineLatest(
this.translate.get("key1"),
Observable.defer(() => this.translate.get("")),
this.translate.get("key3"),
this.translate.get("key4")
)
.subscribe(
([result1, result2, result3, result4]) => {
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
},
error => {
console.log(`${error}`);
}
);
如果这是它正在做的,我想这是合理的行为,因为空键不太可能有效。超过 'internal' 的错误可能会通过 observable 报告,应该由您传递给 subscribe
.
的错误回调处理
从
Observable.combineLatest(
this.translate.get("key1"),
this.translate.get(""),
this.translate.get("key3"),
this.translate.get("key4")
)
.subscribe(([result1, result2, result3, result4]) => {
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
},
error => {
console.log(`${error}`);
});
在第 2 行我得到一个错误,但这似乎没有进入上面的 error
处理程序。不幸的是,我发现的例子和 doco 似乎没有包括如何捕获错误(假设上面的方法可行)。
有没有人知道如何做到这一点?
在我看来,this.translate.get("")
可能正在验证一个参数并抛出 'outside' 可观察对象(即在它创建可观察对象之前)。
您可以使用如下代码验证错误处理:
import "rxjs/add/observable/throw";
Observable.combineLatest(
this.translate.get("key1"),
Observable.throw(new Error("Boom!")),
this.translate.get("key3"),
this.translate.get("key4")
)
.subscribe(
([result1, result2, result3, result4]) => {
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
},
error => {
console.log(`${error}`);
}
);
并且您可以验证 this.translate.get("")
正在抛出 observable 的错误 'outside',如下所示:
import "rxjs/add/observable/defer";
Observable.combineLatest(
this.translate.get("key1"),
Observable.defer(() => this.translate.get("")),
this.translate.get("key3"),
this.translate.get("key4")
)
.subscribe(
([result1, result2, result3, result4]) => {
console.log(result1);
console.log(result2);
console.log(result3);
console.log(result4);
},
error => {
console.log(`${error}`);
}
);
如果这是它正在做的,我想这是合理的行为,因为空键不太可能有效。超过 'internal' 的错误可能会通过 observable 报告,应该由您传递给 subscribe
.