Rxjs:“throw”语句未被管道捕获错误处理
authenticationService提供以下身份验证方法。我无法输入管道捕捉错误。我错过了什么Rxjs:“throw”语句未被管道捕获错误处理,rxjs,ngrx,ngrx-effects,Rxjs,Ngrx,Ngrx Effects,authenticationService提供以下身份验证方法。我无法输入管道捕捉错误。我错过了什么 authenticate(credentials: { username: string; password: string }){ return new Observable<any>((observer: Observer<any>) => { // ... calling the service, obtaining a promise
authenticate(credentials: { username: string; password: string }){
return new Observable<any>((observer: Observer<any>) => {
// ... calling the service, obtaining a promise
const authenticationPromise = ... ;
// This is a promise, it must be converted to an Observable
authenticationPromise
.then(() => {
observer.next('ok');
observer.complete();
})
.catch(err => {
console.log('service error ' + err);
throw new Error('crap');
});
});
}
如上所述,catchError用于:
以可观察的顺序优雅地处理错误
首先,你基本上是通过抓住承诺中的错误来处理承诺中的错误。在承诺中抛出错误不会返回发出错误的可观察对象
你可以:
将你的承诺转化为可观察的,不要使用。抓住。
使用rxjs的“ThrowerError”将错误作为可观察值返回
无论哪种方式,创建可观察对象的方式都值得怀疑
这是处理rxjs中承诺的一种更好、更简洁的方法:
from(authenticationPromise)
.pipe(
map(() => 'ok')
)
您没有在身份验证方法中返回可观察的。试着从你的承诺中得到回报。最后,我的错误是,可观察到的事实上得到了回报。我修正了我的问题。感谢您指出,您不需要创建这样的可观察对象,只需使用return from_promise_here from是一种rxjs创建方法,而不是抛出,调用observer.error,传递您想要报告的错误。感谢您提供的信息。这里的接线员绝对是守门员!而观察家。错误把它钉住了。再次感谢!的确,谢谢。此外,在我的例子中,问题的根本原因与使用throw而不是observer.error并向其传递一个error子类有关。
from(authenticationPromise)
.pipe(
map(() => 'ok')
)