Я использую угловой перехватчик для изменения всех HTTP-запросов, попадающих в конец API.
Когда это происходит только тогда, когда я обновляю приложение из браузера.
this.httpGET('api_handshake').subscribe(response => {
this.APIHandShakeStatus = true
if (response['status']==true){
this._HS_STATUS = true
}
}, error => {
this.logout()
});
который вызывает:
httpGET(path: string, getData=null): Observable<any> {
const token: string = this.TOKENS.access_token;
let headers = new HttpHeaders();
headers = headers.append('Content-Type', 'application/json');
headers = headers.append('Authorization', 'Bearer ' + token);
let params = new HttpParams();
params = params.append('uId', this._userDetails['uId']);
if (getData!=null){
for (let key in getData) {
// Begin assigning parameters
params = params.append(key, getData[key]);
}
}
return this._http.get(this.API_URL + path, { params, headers})
}
это._http.получить перехватывается с помощью стандартного перехватчика:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const token: string = this.global.TOKENS.access_token;
//logging the updated Parameters to browser's console
console.info("Before making api call : ", 'test');
return next.handle(request).pipe(
map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
console.info('event--->>>', event);
// this.errorDialogService.openDialog(event);
}
return event;
}),
catchError((error: HttpErrorResponse) => {
let data = {};
data = {
reason: error && error.error.reason ? error.error.reason : '',
status: error.status
};
if (data['status']==401){
console.info('unauthroized')
console.info(data)
}
return throwError(error);
}));
}
При новом запуске я аутентифицирую себя и вхожу в приложение, которое вызывает функцию ниже, она работает отлично. Затем я обновляю приложение из браузера, который вызывает эту функцию.
В отладчике хрома:
httpGET('api_handshake').subscribe
линия вызывалась неоднократно. Если я удаляю перехватчик, все работает нормально.
httpGET('api_handshake').subscribe вызывается рекурсивно. Он входит внутрь подписчика angular, затем вызывает this.httpGET('api_handshake')





Я смог разобраться в проблеме. Была циклическая зависимость от сервиса к перехватчику. Однако angular не выдавал ошибок циклической зависимости, а отладчик не перебирал зависимости. Потратил больше половины дня, чтобы разобраться.
Когда существует циклическая зависимость между перехватчиком и сервисом. Невозможно отладить ошибку, так как она не перехватывается компилятором angular.
Если вы уже используете отладчик, прошли ли вы через стек вызовов, чтобы найти рекурсивный вызов?