首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我在angular 8中抛出错误时,没有调用Catch Error

当我在angular 8中抛出错误时,没有调用Catch Error
EN

Stack Overflow用户
提问于 2020-05-03 22:15:00
回答 1查看 149关注 0票数 0

我添加了一个HTTP拦截器来捕获请求中所有可能的错误,然后使用throwError抛出该错误

代码语言:javascript
复制
    constructor(private accountService: AccountService) { }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        // add authorization header with jwt token if available
        const currentuser = this.accountService.isLoggedIn;
        const token = localStorage.getItem('jwt');
        if (currentuser && token !== undefined) {
            request = request.clone({
                setHeaders:
                {
                    Authorization: `Bearer ${token}`

                }
            });
            request = request.clone({ headers: request.headers.set('Content-Type', 'application/json') });

            request = request.clone({ headers: request.headers.set('Accept', 'application/json') });
        }

        return next.handle(request).pipe(
            catchError(error => {
                debugger
                if (error instanceof HttpErrorResponse) {

                    const unothorizedError = error;

                    if (unothorizedError.status === 401) {
                        if (unothorizedError.error != null) {
                            return throwError(unothorizedError.error);
                        }
                    }

                    if (unothorizedError.status === 0) {
                        return throwError('Connection failed to the server');
                      }

                    const applicationError = error.headers.get('Application-Error');

                    if (applicationError) {
                        return throwError(applicationError);
                    }

                    const serverError = error.error;
                    let modalStateErrors = '';

                    if (serverError && serverError.errors && typeof serverError.errors === 'object') {
                        for (const key in serverError.errors) {
                            if (serverError.errors[key]) {
                                modalStateErrors += serverError.errors[key] + '\n';
                            }
                        }
                    }
                    return throwError(modalStateErrors || serverError || 'Server Error');
                }
            })
        );
    }

我试图从我的解析器中捕获错误,但是当我调试时,我注意到没有调用catch error

代码语言:javascript
复制
    resolve(route: ActivatedRouteSnapshot): Observable<Product[]> {
    debugger
    return this.productsService
      .getAllProducts(this.pageNumber, this.pageSize, null)
      .pipe(
        catchError(error => {
          console.log(error);
          // this.snackBar.open('Problem retriving your data', 'cancel', {
          //   duration: 5000 ,
          // });
          // this.router.navigate(['/home']);
          return of(null);
        })
      );}

然后TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.被抛出。

所以好像我不能捕捉到拦截器给出的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-03 22:40:46

我在这里link看到这个问题,我添加了

代码语言:javascript
复制
else {return throwError(error);}

在HTTP拦截器中,它可以工作,但我不知道为什么

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61575908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档