返回成功可观察的路由解决呼叫失败?

时间:2019-03-29 01:30:38

标签: angular rxjs angular-router resolve

如果路由解析器中的可观察项失败,则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,但始终转到下一条路线。

1 个答案:

答案 0 :(得分:1)

我使****过于复杂。答案是:

return this.httpClient.get(url, httpOptions).pipe(
  catchError(err => of(null))
);

catchError必须返回一个新的Observable,并将其传递给解析器。我实际上仍然不确定为什么我的原始方法不起作用,但是这可能与我使用的是旧语法和RxJS compat有关。

来源:https://blog.angular-university.io/rxjs-error-handling/