Я хочу перехватывать ошибки HTTP в своем глобальном обработчике исключений.
Обработчик исключений работает с большинством исключений, но наблюдаемые исключения не перехватываются. Исключения, которые я хочу поймать, — это исключения HTTP.
Вот как я попытался отправить наблюдаемую ошибку HTTP в обработчик исключений.
import { Injectable } from '@angular/core';
import { Request, XHRBackend, RequestOptions, Http, Response, RequestOptionsArgs } from '@angular/http';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import { HttpException } from '../exceptions/http-exception';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class HttpErrorService extends Http {
constructor(backend: XHRBackend, defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
request(url: string | Request, options?: RequestOptionsArgs) {
return super.request(url, options).catch((error: Response) => {
// Bypass lint.
fail();
function fail() {
// Here I want to throw the exception to send it to the exception handler, but it should also execute return Observable.throw(error); So I can catch the exception at the subscribe.
throw new HttpException(error);
}
return Observable.throw(error);
});
}
}
Это, конечно, не работает, потому что код после броска не выполняется.
Но выбрасываемое исключение тоже не перехватывается, наверное, потому что это делается в наблюдаемом.
Есть ли способ поймать исключение в глобальном обработчике исключений, и запрос все еще доступен в subscribe((res) => {}, (errRes) => {/*here*/})
?