Я бы предположил, что старая версия Angular была до 4.3?
С 4.3 обычный HTTP-запрос изменился с "Http" на "HttpClient". Основное изменение заключается в том, что в результате вы получаете не ответ, а только тело ответа (json). И если запрос не был успешным (а 401 - не тот :-)), то он выдает ошибку.
Поэтому вы должны отловить ошибку и обработать ее. Это можно сделать несколькими способами. Я предполагаю, что вы используете Rx Js для обработки ответа. Тогда ваш код может выглядеть так:
let response: SomeTyp;
this.httpClient.get<SomeTyp>('myBackendUrl').subscribe( (result) => response = result);
В результате, если ваш внутренний вызов возвращает 400, «обычная» подписка не будет выполнена. Поэтому response
остается пустым.
Одним из решений может быть обработка ошибки в подписке
let response: SomeTyp;
this.httpClient.get<SomeTyp>('myBackendUrl').subscribe(
(result) => response = result,
(errorCase) => this.handleTheError(errorCase)
);
private handleTheError(errorCase:ttpErrorResponse):void {
if(response.status === 401){
if(response.text().includes("Impersonate")){
this.displayText = ImpersonateRejectText;
return
}
}
throw Error('Unexpected Backend Response');
}
Вторым решением будет обработка ошибки в потоке
let response: SomeTyp;
this.httpClient.get<SomeTyp>('myBackendUrl').pipe(
catchError( (errorCase:ttpErrorResponse) => // Handle the error )
).subscribe(
(result) => response = result
);
Преимущество «catchError» состоит в том, что вы можете перехватить ошибку, и если это «ожидаемая» ошибка, которую вы можете обработать изящно, просто верните допустимое значение. Тогда это значение будет обрабатываться подпиской точно так же, как если бы вы получили действительный ответ бэкэнда.
Если ошибку невозможно обработать изящно, вы все равно можете выбросить ее снова
return throwError(errorCase);
И затем обработайте это в подписке.