#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 /