Угловой HttpInterceptor, наконец, никогда не вызывается при ошибке - PullRequest
0 голосов
/ 08 ноября 2019

Я делаю несколько вызовов на отдых и вижу все, кроме одного, на вкладке сети. но по какой-то причине, если один из них имеет 404, другой никогда не звонит finalize. Это ожидаемое поведение? Я бегу под углом 8,2

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

    console.log(`${request.method} '${request.urlWithParams}' ProgressInterceptor ++.`);

    this.progressService.increase();

    return next.handle(request)
      .pipe(
        finalize(() => {
         console.log(`${request.method} '${request.urlWithParams}' ProgressInterceptor --.`);

          this.progressService.decrease();
        }),
      );
  }

enter image description here

1 Ответ

2 голосов
/ 08 ноября 2019

перехватчики работают как промежуточное программное обеспечение, поэтому, если один из них падает, ошибка возрастает до тех пор, пока он не будет перехвачен.

interceptor1.handle(request)
    .pipe(
        switchMap(() => interceptor2.handle(request))
            .pipe(
                switchMap(() => interceptor3.handle(request))
                    .pipe(
                    ...
                    )
            )
    )
.subscribe()

простая ошибка перехвата в некотором перехватчике, чтобы остановить его распространение.

return next.handle(request)
      .pipe(
        catchError(error => of('error caught')),
        finalize(() => {
         console.log(`${request.method} '${request.urlWithParams}' ProgressInterceptor --.`);

          this.progressService.decrease();
        }),
      );
...