【发布时间】:2019-09-25 02:12:11
【问题描述】:
我为我的 Angular 项目创建了一个拦截器来拦截所有请求和响应,但是验证响应中的错误的函数执行了 7 次。
我意识到,当我使用rjxs 的throwError 时,它会多次执行该功能,如果我使用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;
对不起,我的英语不好......
【问题讨论】:
-
catchError用于将错误流替换为有效流。throwError用于将有效流转换为错误流。所以基本上,你要向前,然后向后,然后向前......你能解释一下你想做什么吗? -
请提供minimal reproducible example 和您的完整代码。好像您使用了
retry运算符。 -
我正在尝试验证响应错误,当响应中出现错误时,我将其传递给“errorHandler”,它有一些验证来显示错误。我不想重试。
-
“验证响应错误”是什么意思?因为据我所知,您只是调用了一个对流本身没有影响的函数。然后,您将返回带有
throwError的错误流,然后可以触发服务中的retry运算符。但是话又说回来,您的完整代码和minimal reproducible example 将有很大帮助。除非您发布它们,否则我非常怀疑您会得到答案。 -
添加代码,我会为你添加和安排其余的。 github.com/jsilveira2/catchError-Demonstrantion
标签: node.js angular typescript rxjs