Angular 7 Transform Наблюдаемый отклик на новый наблюдаемый объект

У меня есть API, ответы на которые, как это, и я использую rxjs наблюдаемые

[{
  "error": "error_1",
  "types": [
     {
       "type": "new_type"
     },
     {
       "type": "old_type"
     }
  ],
  "date": "2019-08-29"
}]

Мне нужно преобразовать его в новый формат JSON, чтобы я мог получить формат ответа, который я хотел.

Я пробовал трубу (map()), но я получаю сообщение об ошибке типаObservable<void>"нельзя назначить типу"Observable<Error[]>'

Моя модель

export interface Data {
    error: string,
    types: Types[],
    date: string
}

interface Types {
    type: string
}

Мой Сервис.тс

getError(): Observable<Data[]> {
    return this.http.get<Data[]>(url);
  }

Это то, что я пытался до сих пор, и я удалил код, который выдает ошибку My Component.ts

getUserErrors(user): Observable<Data[]> {
    return this.getData.getError()
      .pipe(map((x) => x.filter(one => one.error !== null)))
}

Вот видимый результат, который мне нужен

[{
  "new_error": "error_1",
  "type_1": "new_type",
  "date": "2019-08-29"
}]

Спасибо за тех, кто поможет

1 ответ

Решение

Насколько я понимаю, вам нужно отфильтровать ответы с нулевыми ошибками, затем сопоставить оставшиеся элементы с новым форматом и вернуть его как другой Observable, Вы можете использовать flatMap для того, чтобы связать несколько Observableвместе

getUserErrors(user): Observable<Data[]> {
    return this.getError()
        .flatMap(result => {
            result = result.filter(elem => elem.error !== null)
                .map(elem => ({
                    new_error: elem.error,
                    type_1: elem.types[0].type, // since you want the first out of the two
                    date: elem.date
                }));
            return Observable.of(result);
        })
}

Позже, когда вы позвоните это:

this.getUserErrors(user).subscribe(
    result => { console.log(result); }
    error => { console.log(error); /* Do some proper error handling */ }
)
Другие вопросы по тегам