Как отменить запрос в Http Interceptor в angular5? - PullRequest
0 голосов
/ 18 мая 2018

В моем угловом приложении есть компонент под названием listdata.component.ts. В ngOnInit () этого компонента происходит 2 вызова API.Но когда получен ответ 401 на 2 запроса, вызов API выхода из системы происходит 2 раза.Мой код перехватчика

@Injectable()
export class TokenInterceptor implements HttpInterceptor {
    notificationItem: any;
    constructor(public authService: AuthGuardService, private router: Router, private notification: NotificationService) { }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        if (this.authService.tokenValid()) {
            const authReq = request.clone({ headers: request.headers.set("Authorization", 'Bearer ' + this.authService.getToken()) });
            return next.handle(authReq).do((event: HttpEvent<any>) => {
            }, err => {

                if (err instanceof HttpErrorResponse) {

                    if (err.status === 401) {

                        if(authReq.url.indexOf('/logout') > -1){
                            localStorage.clear();
                            this.router.navigate(['login']);
                        }
                        else
                        {

                this.authService.logout()

                        }
                    }
                }
            });
        }
        else{
            return next.handle(request);
        }
    }
}

Я хочу отменить все 401 запрос после одного ответа 401 и выйти из системы только один раз. Если оператор takeUntil () может решить мою проблему?. Заранее спасибо.

...