Возвращает успешное наблюдение при сбое разрешения вызова по маршруту?

#angular #rxjs #angular-router #resolve

#angular #rxjs #angular-маршрутизатор #разрешить

Вопрос:

Если наблюдаемое внутри преобразователя маршрута выходит из строя, маршрутизатор 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 , таким образом, маршрут будет успешно разрешен. Этого не происходит.

Что я делаю не так / как мне это решить?

Моя цель состоит в том, чтобы resolve возвращал результат вызова в случае успеха и возвращался lol в случае сбоя, но всегда переходил к следующему маршруту.

Ответ №1:

Я слишком усложняю **** из этого. Ответ таков:

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

catchError необходимо вернуть новое наблюдаемое значение, и оно передается преобразователю. На самом деле я все еще не уверен, почему мой оригинальный метод не сработал, но это может быть как-то связано с тем фактом, что я использую старый синтаксис и совместимость с RxJS.

Источник: https://blog.angular-university.io/rxjs-error-handling /