Angular 7变换对新可观察对象的可观察响应

时间:2019-08-28 03:10:09

标签: angular typescript rxjs observable rxjs-observables

我有一个响应这样的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"
}]

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

据我了解,您需要过滤出具有空错误的响应,然后将其余元素映射为新格式,然后将其返回为另一个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 */ }
)