Angular 7 将 Observable 响应转换为新的可观察对象
Angular 7 Transform Observable response to a new observable object
我有一个 api 这样的响应,我正在使用 rxjs observables
[{
"error": "error_1",
"types": [
{
"type": "new_type"
},
{
"type": "old_type"
}
],
"date": "2019-08-29"
}]
我需要将其转换为新的 json 格式,以便获得我想要的响应格式。
我试过 pipe(map()) 但我收到错误消息,类型“Observable<void>
”无法分配给类型“Observable<Error[]>
”
我的模型
export interface Data {
error: string,
types: Types[],
date: string
}
interface Types {
type: string
}
我的Service.ts
getError(): Observable<Data[]> {
return this.http.get<Data[]>(url);
}
这是我到目前为止尝试过的,我删除了产生错误的代码
我的 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"
}]
感谢那些愿意帮助的人
据我了解,您需要过滤掉带有空错误的响应,然后将剩余的元素映射到新格式,return 作为另一个 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 */ }
)
我有一个 api 这样的响应,我正在使用 rxjs observables
[{
"error": "error_1",
"types": [
{
"type": "new_type"
},
{
"type": "old_type"
}
],
"date": "2019-08-29"
}]
我需要将其转换为新的 json 格式,以便获得我想要的响应格式。
我试过 pipe(map()) 但我收到错误消息,类型“Observable<void>
”无法分配给类型“Observable<Error[]>
”
我的模型
export interface Data {
error: string,
types: Types[],
date: string
}
interface Types {
type: string
}
我的Service.ts
getError(): Observable<Data[]> {
return this.http.get<Data[]>(url);
}
这是我到目前为止尝试过的,我删除了产生错误的代码 我的 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"
}]
感谢那些愿意帮助的人
据我了解,您需要过滤掉带有空错误的响应,然后将剩余的元素映射到新格式,return 作为另一个 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 */ }
)