响应拦截器的CatchError函数多次执行-Angular 6

时间:2019-05-07 12:02:00

标签: node.js angular typescript rxjs

我为我的有角项目创建了一个拦截器,以拦截所有请求和响应,但是验证响应中错误的功能执行了7次。

我意识到,当我使用throwError中的rjxs时,它会执行很多次功能,如果我使用of rxjs,则它只会执行一个,但无法执行执行验证订阅中错误的函数。

constructor(private injector: Injector, public errorHandler: ApplicationErrorHandler) { }

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const sessaoService = this.injector.get(SessaoService);
    if (sessaoService.isLoogedIn()) {
        const token = localStorage.getItem('token');
        const tokenSplit = token.split(' ');
        request = request.clone(
            { setHeaders: { 'Authorization': `${tokenSplit[1]}` } }
        );
    }

    return next.handle(request).pipe(
        catchError((err: HttpErrorResponse) => {
            console.log('Execute function');
            let data = {};
            data = {
                error: err,
                status: err.status,
                method: request.method
            };

            this.errorHandler.handleError(data);
            return throwError(err);
        })
    );
}

我希望catchError函数仅执行一次,但是对于每个请求,它将运行7次。

我的Angular版本是:6.1.3; 我的Rxjs版本是:6.4.0;

对不起,我英语不好...

1 个答案:

答案 0 :(得分:0)

我发现了问题,我的应用程序中有一个共享模块,并在其中使用了具有拦截功能的类,将HTTP_INTERCEPTORS添加为提供程序。