【问题标题】:CatchError function of response interceptor execute multiple times - Angular 6响应拦截器的CatchError函数多次执行 - Angular 6
【发布时间】:2019-09-25 02:12:11
【问题描述】:

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

我意识到,当我使用rjxsthrowError 时,它会多次执行该功能,如果我使用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


【解决方案1】:

我发现了问题,我的应用程序中有一个共享模块,我在其中添加了 HTTP_INTERCEPTORS 作为提供程序,使用我的类和拦截函数。

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多