Angular Interceptor вызывает рекурсивно при обновлении страницы - PullRequest
0 голосов
/ 15 мая 2019

Я использую угловой перехватчик для изменения всех 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})
}

this._http.get перехватывается с помощью стандартного перехватчика:

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.log("Before making api call : ", 'test');
    return next.handle(request).pipe(
        map((event: HttpEvent<any>) => {
            if (event instanceof HttpResponse) {
                console.log('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.log('unauthroized')
                console.log(data)
            }
            return throwError(error);
        }));
}

При новом запуске я аутентифицирую себя и захожу в приложение, которое вызывает нижеприведенную функцию, оно прекрасно работает. Затем я обновляю приложение из браузера, который вызывает эту функцию.

В Chrome Debugger:

httpGET('api_handshake').subscribe

линия вызывается повторно. Если я удаляю перехватчик, все работает нормально.

1 Ответ

1 голос
/ 15 мая 2019

Мне удалось выяснить проблему.Была циклическая зависимость от службы до перехватчика.Тем не менее, angular не выдавал никакой ошибки циклической зависимости, и отладчик не проходил цикл через зависимости.Потратил больше половины дня, чтобы понять это.

Когда существует циклическая зависимость между перехватчиком и службой.Невозможно отладить ошибку, так как она не обнаруживается в угловом компиляторе.

...