Как обрабатывать карту в ответ, если не данные? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть метод, который выполняет запрос к серверу:

public get(): Observable<any> {
    return this.httpClient.get(URL + "get").pipe(
      map((result) => {
        result["data"].forEach((item) => {
          item.title = "title";
        });

        return result["data"];
      }),
      catchError((error: HttpErrorResponse) => throwError(error))
    );
  }

Но в строке result["data"] произошел сбой, поскольку ответ ничего не возвращает.

Как это исправить?

Ответы [ 2 ]

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

Вы можете попробовать выполнить простую проверку if:

public get(): Observable<any> {
    return this.httpClient.get(URL + "get").pipe(
      map((result) => {
        if (result['data']) {
          result["data"].forEach((item) => {
            item.title = "title";
          });
        }
        // this may return undefined.
        return result["data"];
      }),
      catchError((error: HttpErrorResponse) => throwError(error))
    );
  }

Если вы хотите отфильтровать ответы, проверьте filter оператор rjxs. https://www.learnrxjs.io/learn-rxjs/operators/filtering/filter

0 голосов
/ 27 апреля 2020

В качестве альтернативы вы можете рассмотреть использование оператора filter , который завершит наблюдаемое, только если определено result.data. Вот как это можно реализовать:

public get(): Observable<any> {
    return this.httpClient.get(URL + "get").pipe(
      filter((result) => result['data']),
      map((result) => {
        result["data"].forEach((item) => {
          item.title = "title";
        });

        return result["data"];
      }),
      catchError((error: HttpErrorResponse) => throwError(error))
    );
  }
...