Angular 6 HttpInterceptor правильное поведение - PullRequest
0 голосов
/ 11 января 2019

Я написал Http Interceptor в Angular 6 . Цель состоит в том, чтобы перезагрузить домашнюю страницу, когда 302 status возвращается. В настоящее время я не могу понять, почему HttpInterceptor ведет себя так, как оно

Код:

API-вызов, который возвращает 302 status ниже. this._service.checkStatus() вызывает back end API, который возвращает 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?

1 Ответ

0 голосов
/ 11 января 2019

Попробуйте это с 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);     
     })
  )
...