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 */ }
)