我为我的有角项目创建了一个拦截器,以拦截所有请求和响应,但是验证响应中错误的功能执行了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;
对不起,我英语不好...
答案 0 :(得分:0)
我发现了问题,我的应用程序中有一个共享模块,并在其中使用了具有拦截功能的类,将HTTP_INTERCEPTORS添加为提供程序。