Я хочу иметь общий способ обработки исключений, особенно 401, полученных от бэкэнда. Когда я не извлекаю содержимое catchError, оно работает нормально. Однако, если я просто извлекаю его для определенной функции, то в эту функцию ничего не вставляется:
return this.http.request<T>(new HttpRequest('POST', this.appConfig.baseApiPath + url, file, {
reportProgress: true,
headers: headers,
params: urlParams
})).pipe(
catchError((err) => {
if (err.status === 401) {
this.router.navigateByUrl('/login?expired=true');
}
return Observable.throw(err || 'Server error')
})
);
Это работает! Однако я хотел обработать этот код перенаправления в функции, чтобы использовать его другими методами.
Здесь я экспортировал это в функцию:
return this.http.request<T>(new HttpRequest('POST', this.appConfig.baseApiPath + url, file, {
reportProgress: true,
headers: headers,
params: urlParams
})).pipe(
catchError(this.handleHttpError),
);
handleHttpError(error: HttpErrorResponse) {
if (error.status === 401) {
this.router.navigateByUrl('/login?expired=true'); --> router is null!
}
return Observable.throw(error || 'Server error')
}
И в этом случае маршрутизатор (как и другие сервисы, внедренные в конструктор) не имеет значения, если я использую такой способ работы ... не могли бы вы подсказать, почему?