Пользовательский HttpInterceptor - Как вернуть никогда не разрешаемую Observable? - PullRequest
0 голосов
/ 26 октября 2018

Я следую этой статье о том, как реализовать глобальную обработку ошибок в моем приложении Angular с помощью пользовательского HttpInterceptor класса.

Важной частью является эта реализация intercept():

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

    return next.handle(request).do((event: HttpEvent<any>) => {}, (err: any) => {
      if (err instanceof HttpErrorResponse) {
        // do error handling here
      }
    });
  }

Что я не могу понять, как это сделать, если я улавливаю здесь ошибку, как я могу заставить функцию intercept() возвращать Observable, которая никогда не разрешится?

Я попытался изменить next.handle.do() на next.handle.catch(), что позволяет мне возвращать наблюдаемое, но я хочу использовать Observable.never, чтобы вернуть наблюдаемое, которое никогда не разрешится, но ожидает, что я верну тип Observable<HttpEvent<any>>, и оно не позволитя приведу NeverObservable к этому типу.

Есть ли способ получить нужную мне функциональность?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Не возвращай никогда. Вернуть пустое. Они автоматически завершают то, что вы хотите, потому что никогда не будут торчать в памяти, пока на странице не появится событие. Все в цикле, которое возвращает 500/503, просто накапливается.

if (err instanceof HttpErrorResponse) {
   if (err.status === 503 || err.status ===500) {
    // do handling. message or whatever
        return Observable.empty();
   }
}
0 голосов
/ 26 октября 2018

Если я вас правильно понимаю, вы ограничены типом возврата m intercept, который вы не можете изменить?Если вы можете изменить его, просто наберите:

intercept(...): Observable<HttpEvent<any>> | Observable<never>

Если вы не можете этого сделать, тогда я catchError() просто верну наблюдаемое, которое никогда не завершится:

catchError(() => new Observable())

Обратите внимание, что вы можетесоздавать утечки памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...