Возврат Успешно Наблюдаемый на маршруте Устранить сбой вызова? - PullRequest
0 голосов
/ 29 марта 2019

Если наблюдаемое внутри распознавателя маршрута дает сбой, угловой маршрутизатор не перемещается к маршруту. Я хочу обойти это, обернув мой вызов в другую наблюдаемую, которая всегда успешно возвращается, например так:

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 Ответ

1 голос
/ 29 марта 2019

Я переоценил **** из этого.Ответ:

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

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

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

...