Как проверить нулевой ответ в операторах .pipe (map) Rx js? - PullRequest
0 голосов
/ 08 апреля 2020
getDetailsById(eId: number): Observable<Details> {
  return this.api.post('detailsapi', cacheOptions, { Id: eId })
    .pipe(
      map((eDetails: any) => ({
        id: eDetails.eId,
        subDetails: this.mapSubDetails(eDetails.eSubDetails || [])
      })),
      catchError((err) => {
        const template: Template = {   
          id: 0,
          subEquipment: []
        };
        return Observable.throw(err)
      })
    );
}

Я хотел бы проверить код выше, если eDetails равно нулю или нет. Если ноль, то я хочу прекратить все вызовы в Observable.forkJoin.

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Вы можете добавить filter в pipe:

.pipe(filter(isNotNull))

и использовать для этой же защиты:

export function isNotNull<T>(value: T): value is NonNullable<T> {
  return value != null;
}
0 голосов
/ 08 апреля 2020

Вы можете проверить, определено ли eDetails внутри карты, и выдать ошибку, используя throwError. Вы можете попробовать следующее

import { throwError } from 'rxjs';

getDetailsById(eId: number): Observable<Details> {
  return this.api.post('detailsapi', cacheOptions, { Id: eId })
    .pipe(
      map((eDetails: any) => {
        if (eDetails && eDetails !== null) {
          id = eDetails.eId,
          subDetails = this.mapSubDetails(eDetails.eSubDetails || []);
          return subDetails;
        } else {  // <-- throw error here
          throwError(new Error('Received response null'));
        }
      }),
      catchError((err) => {
        const template: Template = {   
          id: 0,
          subEquipment: []
        };
        return Observable.throw(err)
      })
    );
}

throwError возвращает ошибку, которая немедленно выдает уведомление об ошибке.

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