返回成功的Observable路由解决呼叫失败?

问题描述 投票:0回答:1

如果路径解析器内的可观察对象失败,则Angular路由器不会导航到该路由。我希望通过将我的调用包装在另一个observable中来解决这个问题,这个observable总是成功返回,如下所示:

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);
  }

我的理解是内部的observable会出错,而外部的observable会成功地调用next,从而成功地解决了这条路线。这不会发生。

我做错了什么/如何解决这个问题?

我的目标是如果成功则返回调用结果的决心,如果失败则返回lol,但总是转到下一个路径。

angular rxjs angular-router resolve
1个回答
1
投票

我过分复杂了****。答案是:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.