如果路由解析器中的可观察项失败,则Angular路由器不会导航到该路由。我想通过将呼叫包装在另一个可观察到的对象中来解决此问题,该对象总是成功返回,如下所示:
private fetchUserDataOrReturnNullIfError(url: string, httpOptions: any): Observable<any> {
const getLoggedInUserDataOrNullIfCallFails: Observable<any> = new Observable(observer => {
this.httpClient.get(url, httpOptions).subscribe(userData => {
console.log('Got user data: ', userData);
observer.next(userData);
}, err => {
console.log('Call failed');
observer.next('lol');
});
});
return getLoggedInUserDataOrNullIfCallFails;
}
我的决心如下:
resolve(): Observable<any> {
//stuff and things
return this.fetchUserDataOrReturnNullIfError(url, httpOptions);
}
我的理解是,内部可观察对象将出错,而外部可观察对象将成功调用next
,从而路由将成功解析。这没有发生。
我在做什么错/我该如何解决?
我的目标是下定决心,如果成功返回呼叫结果,如果失败则返回lol
,但始终转到下一条路线。
答案 0 :(得分:1)
我使****过于复杂。答案是:
return this.httpClient.get(url, httpOptions).pipe(
catchError(err => of(null))
);
catchError
必须返回一个新的Observable,并将其传递给解析器。我实际上仍然不确定为什么我的原始方法不起作用,但是这可能与我使用的是旧语法和RxJS compat有关。