Как эмулировать ошибку в карте трубы RXJS (Angular)? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь вернуть ошибку в функции карты, если получаю код "ОШИБКА".

import {Injectable} from '@angular/core';
import {HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse} from '@angular/common/http';
import {Observable} from 'rxjs';
import {map} from 'rxjs/operators';

@Injectable()
export class ResponseInterceptor implements HttpInterceptor {
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const request = req.clone();

    return next.handle(request).pipe(
      map((event: any) => {
        if (event instanceof HttpResponse) {
          if (event.body && event.body.code === 'ERROR') {
            throw new Error('Fatal Error');
          }
          const body = event.body ? event.body.body || event.body : null;

          if (body) {
            return event.clone({body});
          }
        }

        return event;
      })
    );
  }
}

Но я улавливаю ошибку в консоли:

core.js: 15724 ОШИБКА TypeError: Вы указали «неопределенный», где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable. at subscribeTo (subscribeTo.js: 41) at subscribeToResult (subscribeToResult.js: 11)

1 Ответ

0 голосов
/ 31 мая 2019
import { throwError } from 'rxjs';

throwError('I made a boo boo')

Вы не можете использовать его на карте, поэтому вам нужно будет переключить карту

return next.handle(request).pipe(
  switchMap((event: any) => {
    if (event instanceof HttpResponse) {
      if (event.body && event.body.code === 'ERROR') {
        return throwError('Fatal Error');
      }
      const body = event.body ? event.body.body || event.body : null;

      if (body) {
        return of(event.clone({body}));
      }
    }

    return of(event);
  })
);
...