Angular 6 HttpInterceptor 正确行为

Angular 6 HttpInterceptor correct behaviour

我在Angular 6 .中写了一个Http Interceptor 目标是在返回 302 status 时重新加载主页。 我目前无法理解为什么 HttpInterceptor 会像现在这样

代码:

API调用下面是returns302 statusthis._service.checkStatus() 调用后端 API 其中 returns 302 http status

API代码:

public checkStatus() : void  {


      this._service.checkStatus().subscribe(

        (data) => console.log('success In checkStatus '),
        (error)=>console.log('error In checkStatus')
      );

 }

拦截器代码:

export class MyInterceptor implements HttpInterceptor{


    constructor(){

    }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        console.log('inside interceptor' );
        return next.handle(request).pipe(

        tap(
                event =>{
                },
                error=>{
                    console.log(error);

                    if (error instanceof HttpErrorResponse) {
                        if (error.status === 302) {
                            window.location.reload();                      
                        }
                      }
                }
            )
       );

    }

}

问题:

现在的问题是当返回 302 status 时,行 (error)=>console.log('error In checkStatus') 仍然在 API - checkStatus 调用中执行。

我的问题是,为什么 API 调用中的错误处理程序仍然被调用。 也就是说,返回 302 后,页面会重新加载 window.location.reload()

但错误处理程序 (error)=>console.log('error In checkStatus') 仍会被调用。

需要做什么来防止在 checkStatus API 中执行错误处理程序代码?

尝试使用 catchError。

return next.handle(request).pipe(   

     tap((event: HttpEvent<any>) => {
       console.log('tap', event);
     }),

     catchError(error => {

       console.log('catchError', error);

       if (error instanceof HttpErrorResponse) {
         if (error.status === 302) {
           window.location.reload();                      
         }
       }

       return throwError(error);     
     })
  )