2

我正在使用 HttpClientget从网络服务获取数据。我想订阅结果数据并将其从 JSON 转换为实际的类,然后有一个Observable从该方法返回这些类中的一个。基本上,当调用者subscribe触发时,我希望它能够上课。

我对 angular 和 observables 很陌生,所以我不确定如何进行链接。所以我想要类似的东西:

constructor(private http: HttpClient) {}

getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
    return this.http.get("...")
        .subscribe(json => json.map(obj => {
            let ar = new EhsAssessmentAr();
            ar.id = obj['id'];
            ...
            return ar;
    }));
}

这当然不会真正编译,然后调用者会这样做:

this.getExistingArsByLab(12).subscribe(ars => { ... });

那时我将拥有ars一个实际的EhsAssessmentAr[].

4

2 回答 2

2

结合@Antoniosss 的回答,我认为这应该可以解决您的问题:

getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
 return this.http.get("...")
    .pipe(map(obj =>  {
        return obj.map(element => {
           let ar = new EhsAssessmentAr();
           ar.id = element['id'];
           ...
           return ar;
        });
 }));
}

请注意,mapObservable不同于Array.map()

于 2018-06-13T17:17:26.280 回答
-1

不要立即订阅,但pipemap

getExistingArsByLab(labId: number) : Observable<EhsAssessmentAr[]> {
    return this.http.get("...")
        .pipe(map(obj =>  {
            let ar = new EhsAssessmentAr();
            ar.id = obj['id'];
            ...
            return ar;
    }));

}

您必须修复括号并添加正确的映射。

于 2018-06-13T16:51:52.053 回答